SQL Server 2005: несколько выражений INNER JOIN - PullRequest
0 голосов
/ 04 апреля 2011

У меня проблемы с соединением нескольких таблиц с основным.Мое первое объединение - LEFT OUTER JOIN, и оно просто объединяет две таблицы для двух половин целого представления (почему они разделяют таблицу, как-то связано с безопасностью).У меня есть несколько элементов в основной таблице, хранящихся в виде идентификаторов, таких как product_id, application_id, state_id и retailer_id.Имена каждого из них хранятся в своих собственных таблицах, как и ожидалось.

Мой оператор отлично работает с LEFT OUTER JOIN и 2 INNER JOINs, однако оператор перестает возвращать данные в 3 ВНУТРЕННИЕ СОЕДИНЕНИЯ.Я не знаю, есть ли проблема с тем, как я сформировал свои ВНУТРЕННИЕ СОЕДИНЕНИЯ или что:

FROM ((((MyDbo.warranty w
    INNER JOIN MyDbo.products p1 ON w.product_id = p1.product_id)
    INNER JOIN MyDbo.applications ap1 ON w.application_id = ap1.application_id)
    INNER JOIN MyDbo.retailers r1 ON w.retailer_id = r1.retailer_id)
    INNER JOIN MyDbo.states s1 ON w.state_id = s1.state_id)
    LEFT OUTER JOIN MyDbo.warranty_info i on w.warranty_id = i.warranty_id

Я здесь далеко от базы?

1 Ответ

4 голосов
/ 04 апреля 2011

Если INNER JOIN не позволяет получить записи обратно, значит, у вас проблема с условием JOIN.

Лучший способ проверить это - использовать LEFT JOIN, а затем предложение WHERE для поиска NULL в правой таблице, например:

SELECT *
FROM table t1
LEFT JOIN table2 t2
  ON t1.key = t2.key
WHERE t2.key IS NULL

поочередно вы можете использовать WHERE NOT EXISTS:

SELECT *
FROM table t1
WHERE NOT EXISTS (SELECT NULL
                  FROM Table2 t2
                  WHERE t2.key = t1.key)
...