web-dev-qa-db-fra.com

INNER JOIN même table

J'essaie d'obtenir des lignes de la même table. C'est une table utilisateur: l'utilisateur a user_id et user_parent_id

Je dois obtenir les lignes user_id et user_parent_id. J'ai codé quelque chose comme ceci:

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]

Mais cela ne montre pas les résultats. Je veux afficher l'enregistrement utilisateur et son enregistrement parent.

17
user1718343

Je pense que le problème est dans votre état 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]

Edit : Vous devriez probablement utiliser LEFT JOIN s'il y a des utilisateurs sans parents.

30
Ronnis

Vous pouvez également utiliser UNION comme

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]
1
Prashant16

Peut-être que cela devrait être le choix (si je comprends bien la question)

select user.user_fname, user.user_lname, parent.user_fname, parent.user_lname
... As before
1
Ed Heal

Votre requête devrait fonctionner correctement, mais vous devez utiliser l'alias parent pour afficher les valeurs de la table parente comme ceci:

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];
1
Mahmoud Gamal

Je ne sais pas comment la table est créée mais essayez ceci ...

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
0
ioses