SQL SELECT из трех таблиц - PullRequest
5 голосов
/ 17 мая 2011

У меня есть три таблицы:

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 может быть нулевым и, следовательно, не отображаться в Content_table

Если бы здесь было множество ответов и я все еще рвал на себе волосы, чтобы получить нужные мне результаты. Может ли любой гуру SQL увидеть простое решение. Потенциальные соединения требуются, жарят мой мозг.

Любая помощь будет высоко ценится. Ради моего скальпа, между прочим;)

Ответы [ 3 ]

12 голосов
/ 17 мая 2011
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
3 голосов
/ 17 мая 2011
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
0 голосов
/ 17 мая 2011
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, чтобы сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...