我正在尝试将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/