三个表中的SQL SELECT

时间:2011-05-17 14:51:27

标签: sql select join

我有三张桌子:

Map_table
- id
- content_id
- from_user_id
- to_user_id
- timestamp

User_table
- id
- name

Content_table
- id
- title

例如:我想从Map_table中选择Map_table.to_user_id = 1

的行

并提供User_table.name,其中Map_table.from_user_id = User_table.id

并提供Content_table.title,其中Map_table.content_id = Content_table.id

Map_table.content_id可能为null,因此不会映射到Content_table

如果在这里经过了大量的答案,仍在撕扯我的头发以获得我需要的结果。 任何SQL专家都可以看到一个简单的解决方案。所需的潜在JOIN正在煎炸我的大脑。

非常感谢任何帮助。为了我的头皮,除其他外;)

3 个答案:

答案 0 :(得分:12)

SELECT mt.*, ut.name, ct.title
FROM
     Map_table mt
INNER JOIN
     User_table ut on mt.from_user_id = ut.id
LEFT JOIN 
     Content_table ct on mt.content_id = ct.id
WHERE 
     mt.to_user_id = 1

答案 1 :(得分:3)

SELECT m.id,m.content_id,m.from_user_id,m.to_user_id,m.timestamp,u.name,c.title
FROM Map_table m
INNER JOIN User_table u ON u.id = m.from_user_id
LEFT OUTER JOIN Content_table c ON c.id = m.content_id
WHERE m.to_user_id = 1

答案 2 :(得分:0)

SELECT mt.*, ut1.name
FROM map_table mt inner join user_table ut1 on mt.from_user_id = ut1.id
inner join user_table ut2 on mt.to_user_id = ut2.id
where mt.to_user_id = 1

您需要两次加入user_table才能执行此操作。