2010-10-05 4 views
4
SELECT 
    tb1.booking_ref, tb1.investor, tb2.cost, tb3.product 
FROM 
    tb1, tb3 LEFT JOIN tb2 
ON 
    tb1.booking_ref = tb2.booking_ref 
AND 
    tb1.investor = tb2.investor 
AND 
    tb1.investor = '12345' 
WHERE 
    tb1.location = tb3.location 

Приведенные выше ошибки запроса из-за ссылок на tb3 - это отлично работает без них.SQL - проблема с левым соединением

Есть ли у кого-нибудь идеи, почему?

+1

Вам нужно условие соединения между tb1 и tb3. Как они связаны? Кроме того, исходя из вашего [предыдущего вопроса] (http://stackoverflow.com/questions/3865680/sql-select-where-matching-record-exists-and-no-matching-record), 'tb1.investor = ' 12345'' принадлежит к предложению 'WHERE', а не как часть соединения между tb1 и tb2. –

+0

См. Мое обновление выше – Tom

+0

Опубликован ответ на основе вашего обновления. –

ответ

7
SELECT 
    tb1.booking_ref, tb1.investor, tb2.cost, tb3.product 
FROM 
    tb1 
     inner join tb3 
      on tb1.location = tb3.location 
     left join tb2 
      on tb1.booking_ref = tb2.booking_ref 
       and tb1.investor = tb2.investor 
WHERE tb1.investor = '12345' 
+0

^^ Не следует включать условие WHERE в качестве предложения AND, чтобы заставить запрос работать с максимальным фильтрованным набором данных. – Dienekes

+0

@Dienekes - Предложение WHERE отличается от 'JOIN' ... – JNK

0

Вместо статьи WHERE добавить tb1.location = tb3.location в статью ON/AND.

Ответить перед вопросом:
Да, это было бы.
Где Вы указали отношения между таблицей tb3 и любым номером tb1, tb2? Для объединений вам необходимо иметь отношение между определенными столбцами среди этих таблиц.

HTH!

0

Это может помочь вам:

SELECT t1.booking_ref, t1.investor, t.cost, t.product 
FROM tb1 t1 
CROSS APPLY(
    SELECT t2.cost, t3.product 
    FROM tb3 t3 
    LEFT JOIN tb2 t2 ON (t1.booking_ref = t2.booking_ref 
        AND t1.investor = t2.investor 
        AND t1.investor = '12345') 
) AS t 

PS: - вам нужно по крайней мере SQL Server 2005 для этого.

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