sql >> Base de Datos >  >> RDS >> Mysql

LEFT JOIN no se comporta como se esperaba, ya que da NULL en MySQL

Supongo que la razón por la que no coincide de la manera que crees que debería es que @row_number no se restablece a 1 para cada subconsulta.

Lo probé, simplemente uniendo los dos primeros (Profesores y Doctores), pero usando CROSS JOIN, para poder ver todos los valores de número_fila.

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

Puede ver que aparentemente los números de fila se incrementan progresivamente, y el valor inicial de 1 en ambas subconsultas ya se ha realizado cuando se numeran las filas.

Es posible que pueda solucionar esto utilizando una variable de usuario distinta en cada subconsulta.

Pero esta consulta no funcionará de la manera que desea, por ejemplo, si alguna vez tiene menos profesores que miembros de otras profesiones.

Honestamente, no haría este tipo de formato de columnas en SQL. Simplemente haga cuatro consultas independientes, obtenga todos los resultados en su aplicación y formatéelos en columnas a medida que genera. Será mucho más simple de esa manera, y el código simple es más fácil de escribir, más fácil de depurar, más fácil de mantener.

Re tu comentario:

Bastante justo, hacer esto como un desafío de codificación está bien, siempre y cuando usted (y otros lectores) sepan que en un proyecto real, hacer SQL excesivamente inteligente no siempre es la mejor idea.

Dado que está haciendo un desafío de codificación, debe resolverlo usted mismo, por lo que no puedo darle la solución que produce el resultado a continuación. Pero esto es evidencia de que es posible (prometo que no me burlé de la salida, realmente la copié y la pegué desde la ventana de mi terminal). ¡Buena suerte!

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