veces tabla misma inner hacer consultar como campos anidados mysql sql join self-join

mysql - hacer - inner join misma tabla



INNER JOIN misma mesa (6)

Creo que el problema está en su condición de JOIN .

SELECT user.user_fname, user.user_lname, parent.user_fname, parent.user_lname FROM users AS user JOIN users AS parent ON parent.user_id = user.user_parent_id WHERE user.user_id = $_GET[id]

Edición : Probablemente debería usar LEFT JOIN si hay usuarios sin padres.

Estoy tratando de obtener algunas filas de la misma tabla. Es una tabla de usuarios: user tiene user_id y user_parent_id .

Necesito obtener la fila user_id y la fila user_parent_id . He codificado algo como esto:

SELECT user.user_fname, user.user_lname FROM users as user INNER JOIN users AS parent ON parent.user_parent_id = user.user_id WHERE user.user_id = $_GET[id]

Pero no muestra los resultados. Quiero mostrar el registro de usuario y su registro principal.


Intentemos responder a esta pregunta, con un escenario bueno y simple, con 3 tablas MySQL , es decir, tabla de datos , tabla de color y tabla de combinación .

Primero vea los valores de la table datos con primary key asignada a la column dateid :

mysql> select * from datetable; +--------+------------+ | dateid | datevalue | +--------+------------+ | 101 | 2015-01-01 | | 102 | 2015-05-01 | | 103 | 2016-01-01 | +--------+------------+ 3 rows in set (0.00 sec)

Ahora muévase a nuestra segunda table valores coloreables con primary key asignada a column colorid :

mysql> select * from colortable; +---------+------------+ | colorid | colorvalue | +---------+------------+ | 11 | blue | | 12 | yellow | +---------+------------+ 2 rows in set (0.00 sec)

y nuestra tercera table ensamblaje final no tiene primary keys y los valores son:

mysql> select * from jointable; +--------+---------+ | dateid | colorid | +--------+---------+ | 101 | 11 | | 102 | 12 | | 101 | 12 | +--------+---------+ 3 rows in set (0.00 sec)

Ahora nuestra condición es encontrar las fechas , que tienen valores de color azul y amarillo .

Entonces, nuestra consulta es:

mysql> SELECT t1.dateid FROM jointable AS t1 INNER JOIN jointable t2 -> ON t1.dateid = t2.dateid -> WHERE -> (t1.colorid IN (SELECT colorid FROM colortable WHERE colorvalue = ''blue'')) -> AND -> (t2.colorid IN (SELECT colorid FROM colortable WHERE colorvalue = ''yellow'')); +--------+ | dateid | +--------+ | 101 | +--------+ 1 row in set (0.00 sec)

Esperanza, esto ayudaría a muchos.


No sé cómo se crea la tabla, pero prueba esto ...

SELECT users1.user_id, users2.user_parent_id FROM users AS users1 INNER JOIN users AS users2 ON users1.id = users2.id WHERE users1.user_id = users2.user_parent_id


Quizás este debería ser el selecto (si entiendo la pregunta correctamente)

select user.user_fname, user.user_lname, parent.user_fname, parent.user_lname ... As before


Su consulta debería funcionar bien, pero debe usar el alias parent para mostrar los valores de la tabla principal de esta manera:

select CONCAT(user.user_fname, '' '', user.user_lname) AS ''User Name'', CONCAT(parent.user_fname, '' '', parent.user_lname) AS ''Parent Name'' from users as user inner join users as parent on parent.user_parent_id = user.user_id where user.user_id = $_GET[id];


También puedes usar UNION como

SELECT user_fname , user_lname FROM users WHERE user_id = $_GET[id] UNION SELECT user_fname , user_lname FROM users WHERE user_parent_id = $_GET[id]