2009-03-06 2 views
0

У меня есть три таблицы:Нужна помощь с запросом (с использованием соединения)

чековая таблица содержит то, что мне нужно, чтобы получить
Квитанции таблицы содержит ссылку на таблицу владельца
Владелец таблица знает, что чековое это связанный с

Мне нужно получить чековые книжки только тогда, когда в квитанциях, связанных с ним, есть строки (через таблицу Владельца). Я точно не знаю, как это сделать, и это похоже на круговое движение. Это то, что я пробовал:

SELECT chk.ID, chk.Description FROM tblCheckbook chk 
LEFT JOIN tblOwner o 
ON r.OwnerID = o.ID 
INNER JOIN tblCashReceipts r 
ON chk.ID = o.CheckbookID 

Но SQL Server жалуется, что «Мульти-часть идентификатор„r.OwnerID“ не могли быть связаны.»
Что мне нужно сделать, чтобы заставить это работать?

+0

Имеют ли квитанции какую чековую книжку они принадлежат? –

+0

нет, только владелец, которому они принадлежат, и владелец знает свою чековую книжку – Malfist

ответ

1

Каждой присоединиться есть пункт on, описывающее отношение. Вам просто нужно установить отношения с правильными объединениями.

Нет смысла использовать левое соединение здесь, когда вы используете внутреннее соединение во втором шаге. Это приводит к тому, что для работы с базой данных требуется более широкий набор, чтобы получить тот же результат.

select c.ID, c.Description 
from tblCheckBook c 
inner join tlbOwner o on o.CheckbookID = c.ID 
inner join tblCashReceipts r on r.OwnerID = o.ID 
2

В момент, когда вы делаете LEFT JOIN, определение r (tblCashReceipts) еще не встречается. Вероятно, вы захотите что-то вроде:

SELECT chk.ID, chk.Description FROM tblCheckbook chk 
LEFT JOIN tblOwner o 
ON chk.ID = o.CheckbookID 
INNER JOIN tblCashReceipts r 
ON o.ID = r.OwnerID 
0

Имеют ли квитанции какую чековую книжку они принадлежат?

Подключить чековые книжки через таблицу квитанций.

Владелец -> Квитанция -> Чековая

+0

Они знают только своего владельца, владелец знает свою чековую книжку – Malfist

+0

Это должно быть: Квитанции -> Владелец -> Чековая книжка (или в обратном направлении)). – Guffa

1

Я думаю, что вы почти у цели, вы просто изменили условия своего соединения. Попробуйте это:

SELECT chk.ID, chk.Description FROM tblCheckbook chk 
LEFT JOIN tblOwner o ON o.CheckbookID = chk.ID 
INNER JOIN tblCashReceipts r ON r.OwnerID = o.ID 

Или:

SELECT chk.ID, chk.Description FROM tblCheckbook chk 
LEFT JOIN tblOwner o ON o.CheckbookID = chk.ID 
LEFT JOIN tblCashReceipts r ON r.OwnerID = o.ID 
WHERE r.OwnerID IS NOT NULL 

Так что hapens если есть несколько reciepts для того же владельца? Используя этот запрос, вы вернете чековую книжку для каждого reciept, которая может быть тем, что вы хотите, но это не похоже на это. Возможно, вы захотите также бросить DISTINCT.

+0

+1, Спасибо, мне действительно нужен DISTINCT – Malfist

Смежные вопросы