SQL-соединения исключают данные - PullRequest
2 голосов
/ 15 апреля 2010

Скажите, у меня есть три таблицы:

Fruit (Table 1)
------
Apple
Orange
Pear
Banana

Produce Store A (Table 2 - 2 columns: Fruit for sale => Price)
-------------------------
Apple => 1.00
Orange => 1.50
Pear => 2.00

Produce Store B (Table 3 - 2 columns: Fruit for sale => Price)
------------------------
Apple => 1.10
Pear => 2.50
Banana => 1.00

Если я хотел бы написать запрос в столбце 1: набор фруктов, предлагаемый в магазине продуктов A, UNION Продуктовый магазин B, столбец 2: цена фруктов в магазине продуктов A (или ноль, если этот фрукт не предлагается) , Колонка 3: Цена на фрукты в Продуктовом магазине B (или ноль, если этот фрукт не предлагается), как мне присоединиться к столам?

Я сталкиваюсь с подобной проблемой (с более сложными таблицами), и независимо от того, что я пытаюсь, если "фрукты" не в "магазине продуктов а", а в "магазине продуктов б", они исключаются (так как Я присоединяюсь к продуктовый магазин первым). Я даже написал подзапрос, чтобы сгенерировать полный список фруктов, затем оставил присоединиться к Магазину продуктов А, но он по-прежнему исключает фрукты, не предлагаемые в А. Любые идеи?

1 Ответ

4 голосов
/ 15 апреля 2010

Ключ должен использовать left join. Это будет включать столбцы из левой боковой таблицы, даже если в правой боковой таблице нет соответствующей строки.

Например:

select f.name, a.price, b.price
from Fruit f
left join ProduceStoreA a on a.Name = f.Name
left join ProduceStoreB b on b.Name = f.Name

Если фрукт не найден в магазине А, второй столбец будет null. Если он не найден в Магазине B, третий столбец будет null. Если ни один из них не продает фрукты, оба столбца два и три будут null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...