У меня есть запрос, который использует LEFT OUTER JOIN
для объединения двух наборов данных. Я знаю, что оба набора данных должны возвращать данные, потому что я запускал суперзапрос и подзапрос отдельно. По какой-то причине запрос возвращает нулевые результаты. Кто-нибудь знает, почему?SQL: LEFT OUTER JOIN не возвращает никаких строк
левые данные:
item FG_lots
447845 E2211
Право данные:
candy_lot_check candy_item
L2211 835116
Предназначенный результат:
item FG_lots candy_lot_check candy_item
447845 E2211 null null
результат моего разбитого запроса (не найдено):
item FG_lots candy_lot_check candy_item
Запрос:
--Initialization--
DECLARE @Item NVARCHAR(30) = '447845'
DECLARE @Date datetime = '6/13/2016'
SET DATEFIRST 1;
DECLARE @client NVARCHAR(20)
SET @client = (SELECT i.Uf_ClientName FROM item AS i WHERE i.item = @Item)
DECLARE @count integer
--Query--
SET @count = (CASE
WHEN (@client = 'A' OR @client = 'B')
THEN 4
WHEN @client = 'C'
THEN 3
WHEN @client = 'D'
THEN 5
ELSE
4
END)
SELECT DISTINCT
t.item,
LEFT(t.lot,@count) AS FG_lots,
(CASE
WHEN candylot.candy_lots IS NULL
THEN 'NO MATCH'
ELSE candylot.candy_lots
END) AS candy_lot_check,
(CASE
WHEN candylot.item IS NULL
THEN 'NO MATCH'
ELSE candylot.item
END) AS candy_item
FROM
ISW_LPTrans AS t
LEFT OUTER JOIN
(
SELECT
t.item,
LEFT(t.lot,@count) AS candy_lots,
t.ref_num AS job,
t.ref_line_suf AS suffix
FROM
ISW_LPTrans AS t
INNER JOIN item AS i on i.item = t.item
WHERE
i.product_code = 'RM-Candy' AND
t.trans_date = @Date AND
t.trans_type = 'I' AND
t.ref_num IN
(
SELECT TOP 1
j.job
FROM
job AS j
WHERE
j.item = @Item AND
j.job_date = (SELECT DATEADD(DAY, 1-DATEPART(WEEKDAY, @Date), @Date))
ORDER BY
j.job
)
AND t.ref_line_suf IN
(
SELECT TOP 1
j.suffix
FROM
job AS j
WHERE
j.item = @Item AND
j.job_date = (SELECT DATEADD(DAY, 1-DATEPART(WEEKDAY, @Date), @Date))
)
GROUP BY
t.item,
t.lot,
t.ref_num,
t.ref_line_suf
) AS candylot ON LEFT(t.lot, @count) = candylot.candy_lots
WHERE
t.ref_num = candylot.job AND
t.ref_line_suf = candylot.suffix AND
t.trans_type = 'F' AND
t.item = @Item AND
t.trans_date = @Date
Ваш 'where' положение поворачивает влево' join' в «внутреннее соединение». Все условия во второй таблице должны быть в разделе 'on'. –
избили меня @GordonLinoff –
Почему я получил downvoted? :( – whatwhatwhat