32

我正在尝试从同一张表中获取一些行。这是一个用户表:用户拥有user_iduser_parent_id

我需要得到user_id行和user_parent_id行。我编写了这样的代码:

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]

但它没有显示结果。我想显示用户记录及其父记录。

4

6 回答 6

44

我认为问题在于你的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]

编辑LEFT JOIN:如果有没有父母的用户,您可能应该使用。

于 2013-02-10T10:40:04.860 回答
2

您也可以使用 UNION 之类的

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]
于 2013-02-10T10:35:51.433 回答
2

让我们尝试用一个简单的场景来回答这个问题,其中包含 3 个MySQL表,即datetablecolortablejointable

首先查看分配给dateidtable datetable值:primary keycolumn

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)

现在转到我们的第二个 tablecolortableprimary key分配给column colorid

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

我们最后的第三个 table 连接对象没有,值是: primary keys

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

现在我们的条件是找到dateid 的,它同时具有蓝色黄色的颜色值。

所以,我们的查询是:

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)

希望,这会帮助很多人。

于 2018-04-19T06:54:08.510 回答
1

也许这应该是选择(如果我正确理解了这个问题)

select user.user_fname, user.user_lname, parent.user_fname, parent.user_lname
... As before
于 2013-02-10T10:26:13.600 回答
1

您的查询应该可以正常工作,但您必须使用别名parent来显示父表的值,如下所示:

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];
于 2013-02-10T10:26:28.703 回答
1

我不知道表是如何创建的,但试试这个......

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
于 2016-11-28T14:35:31.990 回答