sql >> Databáze >  >> RDS >> Mysql

LEFT JOIN se nechová podle očekávání, protože dává NULL v MySQL

Předpokládám, že důvodem, proč to neodpovídá tak, jak si myslíte, že by mělo, je to, že @row_number se neresetuje na 1 pro každý dílčí dotaz.

Vyzkoušel jsem to, jen jsem se připojil k prvním dvěma (profesoři a lékaři), ale pomocí CROSS JOIN, takže jsem viděl všechny hodnoty row_number.

+------------+--------+------------+----------+
| 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 |
+------------+--------+------------+----------+

Můžete vidět, že čísla řádků se zjevně progresivně zvyšují a počáteční hodnota 1 v obou dílčích dotazech již byla provedena v době, kdy byly řádky očíslovány.

Možná to budete moci opravit použitím odlišné uživatelské proměnné v každém dílčím dotazu.

Ale tento dotaz stejně nebude fungovat tak, jak chcete, například pokud budete mít někdy méně profesorů než členů jiných profesí.

Upřímně, v SQL bych tento druh sloupcového formátování nedělal. Stačí provést čtyři nezávislé dotazy, načíst všechny výsledky do aplikace a při výstupu je formátovat do sloupců. Bude to mnohem jednodušší a jednoduchý kód se snadněji píše, snáze se ladí a snáze se udržuje.

K vašemu komentáři:

Spravedlivé, udělat to jako výzvu ke kódování je v pořádku, pokud vy (a další čtenáři) víte, že ve skutečném projektu není příliš chytré SQL vždy nejlepší nápad.

Protože děláte kódovací výzvu, měli byste ji vyřešit sami, takže vám nemohu poskytnout řešení, které produkuje výstup níže. Ale toto je důkaz, že je to možné (slibuji, že jsem výstup nevysmíval, opravdu jsem ho zkopíroval a vložil z okna svého terminálu). Hodně štěstí!

+------------+-----------+--------+-----------+----------+
| 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. Vyplňte rozevírací seznam HTML/PHP na základě prvního rozevíracího výběru

  2. ruby sequel gem - jak dotazovat pole s příponou pg_array

  3. Dávkový soubor pro připojení mysql a spouštění příkazů

  4. Hash Co? Pochopení hash indexů