我正在尝试将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
但它在表名2中仅返回1,92之类的值。如何将这些更改为管理员,
答案 0 :(得分:4)
如果我正确理解了您的问题,表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。