sql >> Database teknologi >  >> RDS >> Mysql

LEFT JOIN opfører sig ikke som forventet, som giver NULL'er i MySQL

Jeg formoder, at grunden til, at det ikke stemmer overens, som du tror, ​​det skal, er at @row_number nulstilles ikke til 1 for hver underforespørgsel.

Jeg testede det, jeg sluttede mig bare til de to første (professorer og læger), men brugte en CROSS JOIN, så jeg kunne se alle rækkenummerværdierne.

+------------+--------+------------------- --+| rækkenummer | navn | rækkenummer | navn |+------------+--------+------------+--------+| 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 |+------------+--------+------------+--------+

Du kan se, at rækkenumrene tilsyneladende øges progressivt, og startværdien på 1 i begge underforespørgsler er allerede blevet udført på det tidspunkt, hvor rækkerne er nummereret.

Du kan muligvis løse dette ved at bruge en særskilt brugervariabel i hver underforespørgsel.

Men denne forespørgsel vil alligevel ikke fungere, som du ønsker, for eksempel hvis du nogensinde har færre professorer end medlemmer af andre professioner.

Helt ærligt, jeg ville ikke lave denne form for kolonneformatering i SQL. Bare lav fire uafhængige forespørgsler, hent alle resultaterne ind i din applikation og formater dem i kolonner, mens du udskriver. Det vil være meget enklere på den måde, og simpel kode er lettere at skrive, nemmere at fejlsøge, nemmere at vedligeholde.

Om din kommentar:

Fair nok er det fint at gøre dette som en kodningsudfordring, så længe du (og andre læsere) ved, at det i et rigtigt projekt ikke altid er den bedste idé at lave overdreven smart SQL.

Da du laver en kodningsudfordring, bør du løse den selv, så jeg kan ikke give dig den løsning, der producerer nedenstående output. Men dette er bevis på, at det er muligt (jeg lover, at jeg ikke hånede outputtet, jeg kopierede og indsatte det virkelig fra mit terminalvindue). Held og lykke!

+------------+--------+--------+-------- --+----------+| rækkenummer | Professor | Læge | Sangerinde | Skuespiller |+---------------------------------------- ----------+| 1 | Ashley | Aamina | Christen | Eva || 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. SQLite Slet

  2. Forespørgsel efter en tilpasset postgresql-parameter med SELECT-sætning

  3. Hvordan kan jeg bruge jaro-winkler til at finde den nærmeste værdi i en tabel?

  4. JDBC udfører ikke kommandoen SHOW DATABASES