sql server—使用第三个表进一步筛选结果的sql查询

snvhrwxg  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(232)

我正在用mssql编写一个查询,并尝试在两个表之间过滤数据,然后用第三个表中的数据进一步细化它。
有三张table。一个是主表(tbl1),次表列出有缺陷的产品(tbl2)。它们将根据一列中的状态插入此表中。第三个表保存装运数据(tbl3)。有些情况下,有缺陷的产品已包括在装运中。
此查询提供具有缺陷的所有项的列表:

SELECT tbl1.ProductSerialNumber, tbl1.ProductSize, tbl1.ProductColor, tbl2.NCRNumber, tbl1.ReasonFailure, tbl1.ProductStatus, tbl2.Notes, tbl1.Date_Time
FROM     tbl1 INNER JOIN
                  tbl2 ON tbl1.ProductSerialNumber = tbl2.ProductSerialNumber
WHERE  (tbl1.ProductStatus LIKE '%NCR' OR
                  tbl1.ProductStatus IS NULL) AND (tbl2.NCRNumber IS NOT NULL)
ORDER BY tbl1.Date_Time DESC

我面临的问题是使用第三个表来过滤更多的结果。第三个表中的工单包含所有装运的编号。如果发货的工单为0(零),我不想在结果中显示它,应该每隔一个工单编号显示一次。目标是筛选出缺少缺陷且已分配给工作订单0(零)的产品。
我试过了

SELECT tbl1.ProductSerialNumber, tbl1.ProductSize, tbl1.ProductColor, tbl2.NCRNumber, tbl1.ReasonFailure, tbl1.ProductStatus, tbl2.Notes, tbl1.Date_Time, 
                  tbl3.WorkOrder
FROM     tbl1 INNER JOIN
                  tbl2 ON tbl1.ProductSerialNumber = tbl2.ProductSerialNumber INNER JOIN
                  tbl3 ON tbl1.ProductSerialNumber = tbl3.ProductSerialNumber
WHERE  (tbl1.ProductStatus LIKE '%NCR' OR
                  tbl1.ProductStatus IS NULL) AND (tbl2.NCRNumber IS NOT NULL) AND (tbl3.WorkOrder <> N'0')
ORDER BY tbl1.Date_Time DESC
bvn4nwqk

bvn4nwqk1#

我会用一个不在的:

SELECT tbl1.ProductSerialNumber, tbl1.ProductSize, tbl1.ProductColor, tbl2.NCRNumber, tbl1.ReasonFailure, tbl1.ProductStatus, tbl2.Notes, tbl1.Date_Time, 
                  tbl3.WorkOrder
FROM     tbl1 INNER JOIN
                  tbl2 ON tbl1.ProductSerialNumber = tbl2.ProductSerialNumber 
WHERE  (tbl1.ProductStatus LIKE '%NCR' OR
                  tbl1.ProductStatus IS NULL) AND (tbl2.NCRNumber IS NOT NULL) AND
                  tbl1.ProductSerialNumber NOT IN (
                      SELECT tbl3.ProductSerialNumber
                      FROM tbl3
                      WHERE (tbl3.WorkOrder = N'0')
                  )
ORDER BY tbl1.Date_Time DESC
wgx48brx

wgx48brx2#

此查询以较少的执行时间提供输出time:-

SELECT tbl1.ProductSerialNumber, tbl1.ProductSize, tbl1.ProductColor, tbl2.NCRNumber, 
tbl1.ReasonFailure, tbl1.ProductStatus, tbl2.Notes, tbl1.Date_Time,tbl3.WorkOrder
FROM tbl1 INNER JOIN
     tbl2 ON tbl1.ProductSerialNumber = tbl2.ProductSerialNumber 
WHERE  (tbl1.ProductStatus LIKE '%NCR' OR  tbl1.ProductStatus IS NULL) 
AND (tbl2.NCRNumber IS NOT NULL) 
AND NOT EXISTS(SELECT 1 FROM tbl3 WHERE tbl1.ProductSerialNumber = tbl3.ProductSerialNumber AND tbl3.WorkOrder=N'0')
ORDER BY tbl1.Date_Time DESC

相关问题