我正在尝试将3个相关表中的值连接到一个。
我有3张桌子:

表:U

╔════╦══════════════╦
║uid ║    name      ║
╠════╬══════════════╣
║  1 ║    admin     ║
║ 92 ║      a       ║
╚════╩══════════════╝


桌子:N

╔════╦══════════════╦
║uid ║     nid      ║
╠════╬══════════════╣
║  1 ║     152      ║
║ 92 ║     153      ║
╚════╩══════════════╝


桌子:R

╔════╦══════════════╦
║ id ║   user_id    ║
╠════╬══════════════╣
║152 ║     92       ║
║153 ║      1       ║
╚════╩══════════════╝


我想展示

╔════╦══════════════╦════════╗
║ id ║     name1    ║ name2  ║
╠════╬══════════════╬════════╣
║152 ║     admin    ║    a   ║
║153 ║       a      ║  admin ║
╚════╩══════════════╩════════╝


我试过这样的SQL查询

SELECT nid id, name name1, user_uid name2
FROM u u, n n, r r
WHERE u.uid = n.uid
AND n.nid = r.id


但它在表name2中仅返回类似1,92的值。如何将这些更改为管理员

最佳答案

如果我正确理解您的问题,则表R中的user_id列引用表U中的uid列。

如果是这样,则需要第二次引用表U来提供name2。我会这样写:

select n.nid, u1.name as name1, u2.name as name2
from u u1
  inner join n on u1.uid = n.uid
  inner join r on n.nid = r.id
  inner join u u2 on r.user_id = u2.uid


我已经使用过两次表U-一次提供name1,第二次提供name2。

关于mysql - 3个相关的表合而为一,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23404754/

10-13 00:55