Рассмотрим три таблицы в SQL серверной базе данных, STOCK
, BINS
и VENDORS
:
:: STOCK :: BINS :: VENDORS
+------+-----+-------+ +-----+--------+ +----+---------+
| SKU | BIN | COUNT | | BIN | VENDOR | | ID | NAME |
+------+-----+-------+ +-----+--------+ +----+---------+
| 1000 | A01 | 3 | | A01 | 1 | | 1 | Apples |
| 2000 | A02 | 4 | | A02 | 1 | | 2 | Oranges |
| 1000 | B01 | 6 | | B01 | 2 | +----+---------+
+------+-----+-------+ +-----+--------+
Как мне вернуть набор результатов, включающий все столбцы из * 1007 Таблица * STOCK вместе с именем поставщика из таблицы VENDORS , с условием, что я ищу конкретный c номер. Имя поставщика должно быть определено на основе отношения ID между таблицей BINS и VENDORS.
Требуемый вывод:
+------+-----+-------+---------+
| SKU | BIN | COUNT | VENDOR |
+------+-----+-------+---------+
| 1000 | A01 | 3 | Apples |
| 1000 | B01 | 6 | Oranges |
+------+-----+-------+---------+
Я попытался использовать левые внешние соединения, а также вложенные выбирает. Используя этот запрос, например:
SELECT [stock].*,
(
SELECT [vendors].[name]
FROM [vendors], [bins]
WHERE [vendors].[id] = [bins].[vendor]
AND [bins].[bin] = [stock].[bin]
) AS [vendor]
FROM [stock]
WHERE [stock].[sku] = '1000'
Я получаю этот результат (проблема в NULL):
+------+-----+-------+--------+
| SKU | BIN | COUNT | VENDOR |
+------+-----+-------+--------+
| 1000 | A01 | 3 | Apples |
| 1000 | B01 | 6 | NULL |
+------+-----+-------+--------+
Как мне сформировать свой запрос, чтобы получить желаемый результат отмечено выше, наиболее производительным образом?