2016-06-14 9 views
-1

LEFT OUTER JOINを使用して2つのデータセットをマージするクエリがあります。スーパークエリとサブクエリを別々に実行したため、両方のデータセットがデータを返すはずです。何らかの理由で、クエリがゼロの結果を返しています。誰でも知っている理由は?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 
+5

あなたの '句は'左join'に回しているWHERE'内部結合。 2番目のテーブルのすべての条件は 'on'節になければなりません。 –

+0

私にそれを打つ@GordonLinoff –

+0

なぜ私はdownvotedになったのですか? :( – whatwhatwhat

答えて

0

次の2つの 'T' の別名を持っているが、それを変更してみてください。

は、あなたが、それは何かが同様に右のロジックではないことが考えられます(indentwiseない、joinwiseを)それはそれを読みやすくするために書き換えることができそうです

関連する問題