【问题标题】:sql join values from same tablesql连接来自同一个表的值
【发布时间】:2019-09-11 07:47:20
【问题描述】:

我是通过访问 this question 来的。

所以我做了这样的查询

SELECT ru.iUserId,ru.iRefUserId,CONCAT(ru.vName,ru.vLastName) AS userName,CONCAT(iru.vName,iru.vLastName) AS RefUserName
FROM `register_user` ru
 INNER JOIN `register_user` iru
 ON ru.iRefUserId = iru.iRefUserId
WHERE ru.iRefUserId > 0

而数据库是这样的 所以基本上我的需要是当我查询时需要一个 refUserId 用户全名

SELECT * FROM TABLE WHERE iRefUserId > 0

上面的查询结果输出我与用户名相同的名字

【问题讨论】:

标签: mysql sql join self-join


【解决方案1】:

您可能正在寻找外连接:显示所有用户及其 ref 用户(如果存在)。

SELECT
  ru.iuserid,
  ru.irefuserid,
  CONCAT(ru.vname, ru.vlastname) AS username,
  CONCAT(iru.vname, iru.vlastname) AS refusername
FROM register_user ru
LEFT OUTER JOIN register_user iru ON iru.iuserid = ru.irefuserid
ORDER BY ru.iuserid;

我已更正了错误的连接条件(错误的 ID)。此外,由于不存在用户 ID 为 0 的用户,我猜您只是想避免查找该 ID,因此我放弃了条件ru.iRefUserId > 0。不需要,因为外连接已经处理了。

【讨论】:

    【解决方案2】:

    需要更改加入密钥

    SELECT ru.iUserId,ru.iRefUserId,
    CONCAT(ru.vName,ru.vLastName) AS userName,
    CONCAT(iru.vName,iru.vLastName) AS RefUserName
    FROM `register_user` ru
      JOIN `register_user` iru
     ON ru.iuserid = iru.iRefUserId
    WHERE ru.iRefUserId > 0
    

    注意我已经给了WHERE ru.iRefUserId > 0这个代码因为你在你的回答中给出了这就是为什么但是如果你把它那么你第一个将永远被忽略

    【讨论】:

    • 不工作..!当我运行 SELECT ru.iUserId,ru.iRefUserId, CONCAT(ru.vName,ru.vLastName) AS userName FROM register_user` ru WHERE ru.iRefUserId > 0` 时,我找到了一个数据,但是当我运行您的查询时,它返回 0 个结果
    • @TarangP dbfiddle.uk/… chcecck 我为您创建的演示链接及其在否决投票前工作正常请查看第 1 次
    • 我没有那样做@Zaynul
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多