【问题标题】:Select another user from same table从同一个表中选择另一个用户
【发布时间】:2014-04-02 18:57:18
【问题描述】:

所以我有一张用户表

少数用户是“所有者” 一个用户可以有一个所有者

现在我想从用户中选择所有者(都在同一个表中)

示例: 所有者:

user_id: 34
user_name: hiimowner
user_owner_id: NULL

用户:

user_id: 63
user_name: randomperson
user_owner_id: 34

现在我正在寻找能够找到所有者的用户名的正确 SQL 查询

所以如果我可以请求“randomperson”的所有者,它应该返回“hiimowner”

【问题讨论】:

  • 你有没有尝试过?如果是,请在此处分享。

标签: sql


【解决方案1】:

试试这个,

Select u.*,o.user_name from User as u
left join  User o on o.user_id = u.user_owner_id

如果要过滤特定记录,则添加 where 子句,

Select u.*,o.user_name from User as u
left join  User o on o.user_id = u.user_owner_id
where u.user_id = 63

【讨论】:

  • 所有者不是表。所有者是用户,存储在 User 表中。
  • 是的,现在我明白了,我正在改变我的答案。
【解决方案2】:

您正在寻找的技巧是自联接:

SELECT o.username
FROM   users o
JOIN   users u ON u.user_owner_id = o.user_id
WHERE  u.user_name = 'randomperson'

【讨论】:

  • 这个答案和蓝色答案都是正确的,但使用明确的名称命名表别名总是更好 - 并且“o”是比“t2”更好的名称来命名所有者别名。跨度>
【解决方案3】:
SELECT * FROM table AS t1
JOIN table AS t2
ON t1.user_id = t2.user_owner_id
WHERE t2.user_id = 63

【讨论】:

  • 这个结果返回了我自己和所有者的 2 个用户名 我如何仅从我的结果中获得第二个? $result['user_name']
  • SELECT t2.user_id, t2.user_name, t2.user_owner_id, t1.user_id AS owner_user_id, t1.user_name AS owner_user_name, t1.user_owner_id AS owner_user_owner_id FROM ...休息是一样的。或者只是 SELECT t2.* FROM ... 也可以解决问题。
猜你喜欢
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 2011-03-30
相关资源
最近更新 更多