#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.