假设我有一张名为 users
由列组成: user_id
, user_name
, user_created_by
.
+------------------+----------------------+-------------------+
| user_id + user_name + user_created_by +
+------------------+----------------------+-------------------+
| 1 | John | 1 |
| 2 | Ann | 1 |
| 3 | Paul | 2 |
| 4 | King | 2 |
| 5 | Dirk | 3 |
+------------------+----------------------+-------------------+
价值 user_created_by
是 user_id
谁创造了那张唱片。现在,我想做一个查询,结果是一个特定的行和一个附加的列 user_created_by_name
哪个是 user_name
的 user_id
从 user_created_by
. 假设我们想得到“paul”的记录,记录的创建者是谁(名字)(临时的新列)。为了便于理解,这是我的预期结果:
+----------+--------------+-------------------+------------------------+
| user_id | user_name | user_created_by | user_created_by_name |
+----------+--------------+-------------------+------------------------+
| 3 | Paul | 2 | Ann |
+----------+--------------+-------------------+------------------------+
这是我使用codeigniter的查询:
$query=$this->db->query("SELECT *,
(SELECT user_name FROM users WHERE user_id = user_created_by)
AS "user_created_by_name" FROM users WHERE user_id=3);
但我的结果是:
+----------+--------------+-------------------+------------------------+
| user_id | user_name | user_created_by | user_created_by_name |
+----------+--------------+-------------------+------------------------+
| 3 | Paul | 2 | NULL |
+----------+--------------+-------------------+------------------------+
4条答案
按热度按时间bqjvbblv1#
可以使用alias进行自连接(两次连接同一个表),将表作为不同的数据集
nnsrf1az2#
使用自联接
p1iqtdky3#
可以使用连接来解决此问题。
如果您的用户不是由其他用户创建的,请改用左联接:
whitzsjs4#
这将起作用:
它被称为自联接,用于组合同一表的两条记录。