SQL ВЫБИРАЕТ из трех таблиц

#sql #select #join

#sql #выберите #Присоединиться

Вопрос:

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

 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 найти простое решение. Требуемые потенциальные соединения поджаривают мой мозг.

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

Комментарии:

1. Судя по описанию, вы на правильном пути. Что вы пробовали?

2. как ни странно, я никогда не получал уведомлений об ответах и просто вернулся сюда, чтобы посмотреть.. тем временем мне, наконец, удалось запустить его, используя тот же ответ, что и у Parkyprg ниже 😉 Я попробую Justin’s и посмотрю, какая из них быстрее. Спасибо за ответ! Скальп по-прежнему не поврежден.

Ответ №1:

 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. добавьте это в конце WHERE m.to_user_id = 1 🙂

2. Вот что у меня получилось. Спасибо! 😉

Ответ №2:

 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
  

Комментарии:

1. Он хочет отфильтровать, где to_user_id = 1

Ответ №3:

 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.