Проблема простого SQL-запроса - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть таблица с именем Languages, в которой хранятся языки, на которых может разговаривать каждый человек, хранящийся в таблице Persons, затем у меня есть таблица с именем Homework, в которой хранятся все домашние задания, которые должен выполнять каждый человек, но связанныена язык.Я могу выбрать домашнюю работу, которую 1 человек должен выполнить для языка 1 (левое соединение), но также хотел бы иметь возможность выбрать в том же запросе язык, на котором 1 человек может говорить.Может ли кто-нибудь подсказать мне, как этого добиться?При левом соединении с языками результаты будут испорчены, как и в случае с языками в таблице домашних заданий.

«Много языков и людей»: «Много2». То же самое относится и к «Домашней работе» и «Персоналам».

Это работает, но не получается, когда я добавляю секунду left join:

SELECT p.id, l.id, h.id
FROM Persons AS p
LEFT JOIN Homework AS h ON h.person_id = p.id
#LEFT JOIN Languages AS l ON l.person_id = p.id #Screws the result multipliying by the number of available languages
WHERE p.id = 1
AND h.language_id = 1  

Iхотел бы объединить приведенный выше запрос и следующее:

 SELECT *
 FROM languages
 WHERE person_id=1

1 Ответ

1 голос
/ 03 ноября 2011

Вы пытаетесь найти?

Person | Language | Homework 
------------------------------
Bob | English | 
Bob | French | 
Bob | Spanish | Geography

James | English |
James | French | History
James | Spanish |

Используя это ...

SELECT p.id, l.id, h.id
FROM Persons AS p

LEFT JOIN Languages AS l ON l.person_id = p.id 

LEFT JOIN Homework AS h ON h.language_id = l.id
    And h.person_id = p.id

Или

Person | Language | Homework 
------------------------------
Bob | Spanish | Geography
James | French | History

Что я считаю, это то, что уже было

ОБНОВЛЕНИЕ: теперь это должно дать вам человека со всеми языками, но показывать только домашние задания, соответствующие желаемому языку

SELECT p.id, l.id, h.id
FROM Persons AS p

LEFT JOIN Languages AS l ON l.person_id = p.id 

LEFT JOIN Homework AS h ON h.language_id = l.id
    And h.person_id = p.id
    And h.language_id = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...