sql >> Database >  >> RDS >> Mysql

LEFT JOIN gedraagt ​​zich niet zoals verwacht en geeft NULL's in MySQL

Ik veronderstel dat de reden dat het niet overeenkomt met de manier waarop je denkt dat het zou moeten, is dat @row_number wordt niet teruggezet naar 1 voor elke subquery.

Ik heb het uitgeprobeerd, alleen lid geworden van de eerste twee (professoren en artsen), maar met behulp van een CROSS JOIN, zodat ik alle row_number-waarden kon zien.

+------------+--------+------------+----------+
| row_number | name   | row_number | name     |
+------------+--------+------------+----------+
|          8 | Aamina |          1 | Ashley   |
|          8 | Aamina |          2 | Belvet   |
|          8 | Aamina |          3 | Britney  |
|          8 | Aamina |          4 | Maria    |
|          8 | Aamina |          5 | Meera    |
|          8 | Aamina |          6 | Naomi    |
|          8 | Aamina |          7 | Priyanka |
|          9 | Julia  |          1 | Ashley   |
|          9 | Julia  |          2 | Belvet   |
|          9 | Julia  |          3 | Britney  |
|          9 | Julia  |          4 | Maria    |
|          9 | Julia  |          5 | Meera    |
|          9 | Julia  |          6 | Naomi    |
|          9 | Julia  |          7 | Priyanka |
|         10 | Priya  |          1 | Ashley   |
|         10 | Priya  |          2 | Belvet   |
|         10 | Priya  |          3 | Britney  |
|         10 | Priya  |          4 | Maria    |
|         10 | Priya  |          5 | Meera    |
|         10 | Priya  |          6 | Naomi    |
|         10 | Priya  |          7 | Priyanka |
+------------+--------+------------+----------+

Je kunt zien dat de rijnummers blijkbaar progressief worden verhoogd en dat de beginwaarde van 1 in beide subquery's al is gedaan tegen de tijd dat de rijen zijn genummerd.

U kunt dit mogelijk oplossen door in elke subquery een afzonderlijke gebruikersvariabele te gebruiken.

Maar deze zoekopdracht werkt sowieso niet zoals je wilt, bijvoorbeeld als je ooit minder hoogleraren hebt dan leden van andere beroepen.

Eerlijk gezegd zou ik dit soort kolomopmaak in SQL niet doen. Voer gewoon vier onafhankelijke query's uit, haal alle resultaten op in uw toepassing en formatteer ze in kolommen terwijl u ze uitvoert. Het zal op die manier veel eenvoudiger zijn, en eenvoudige code is gemakkelijker te schrijven, gemakkelijker te debuggen en gemakkelijker te onderhouden.

Over uw opmerking:

Eerlijk genoeg is het prima om dit als een codeeruitdaging te doen, zolang jij (en andere lezers) weten dat in een echt project het doen van buitengewoon slimme SQL niet altijd het beste idee is.

Aangezien u een codeeruitdaging doet, moet u deze zelf oplossen, dus ik kan u niet de oplossing geven die de onderstaande uitvoer oplevert. Maar dit is het bewijs dat het mogelijk is (ik beloof dat ik de uitvoer niet bespot heb, ik heb het echt gekopieerd en geplakt vanuit mijn terminalvenster). Veel succes!

+------------+-----------+--------+-----------+----------+
| row_number | Professor | Doctor | Singer    | Actor    |
+------------+-----------+--------+-----------+----------+
|          1 | Ashley    | Aamina | Christeen | Eve      |
|          2 | Belvet    | Julia  | Jane      | Jennifer |
|          3 | Britney   | Priya  | Jenny     | Ketty    |
|          4 | Maria     | NULL   | Kristeen  | Samantha |
|          5 | Meera     | NULL   | NULL      | NULL     |
|          6 | Naomi     | NULL   | NULL      | NULL     |
|          7 | Priyanka  | NULL   | NULL      | NULL     |
+------------+-----------+--------+-----------+----------+



  1. PHP:Geen php.ini-bestand

  2. MySQL-server opstartfout 'De server is gestopt zonder het PID-bestand bij te werken'

  3. Kan ik een berekend veld opnieuw gebruiken in een SELECT-query?

  4. Hoe importeer ik rijen naar Postgresql vanuit STDIN?