3个相关表格

时间:2014-05-01 08:57:57

标签: mysql sql

我正在尝试将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之类的值。如何将这些更改为管理员,

1 个答案:

答案 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。