Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

LEFT JOIN não se comporta como esperado, pois fornece NULLs no MySQL


Suponho que o motivo pelo qual não está correspondendo da maneira que você acha que deveria é que @row_number não está redefinindo para 1 para cada subconsulta.

Eu testei, apenas juntando os dois primeiros (Professors e Doctors), mas usando um CROSS JOIN, para que eu pudesse ver todos os valores 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 |
+------------+--------+------------+----------+

Você pode ver que aparentemente os números das linhas são incrementados progressivamente, e o valor inicial de 1 em ambas as subconsultas já foi feito no momento em que as linhas são numeradas.

Você pode corrigir isso usando uma variável de usuário distinta em cada subconsulta.

Mas essa consulta não funcionará da maneira que você deseja, por exemplo, se você tiver menos professores do que membros de outras profissões.

Sinceramente, eu não faria esse tipo de formatação colunar no SQL. Basta fazer quatro consultas independentes, buscar todos os resultados em seu aplicativo e formatar em colunas à medida que você produz. Será muito mais simples assim, e código simples é mais fácil de escrever, mais fácil de depurar, mais fácil de manter.

Re seu comentário:

Bastante justo, fazer isso como um desafio de codificação é bom, desde que você (e outros leitores) saibam que em um projeto real, fazer SQL excessivamente inteligente nem sempre é a melhor ideia.

Como você está fazendo um desafio de codificação, você deve resolvê-lo sozinho, portanto, não posso fornecer a solução que produz a saída abaixo. Mas isso é uma evidência de que é possível (eu prometo que não zombei da saída, eu realmente copiei e colei da janela do meu terminal). Boa sorte!
+------------+-----------+--------+-----------+----------+
| 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     |
+------------+-----------+--------+-----------+----------+