我试图区分两个select
语句。
这是第一个select
:
SELECT 1
SELECT *
FROM h_log_material
LEFT JOIN h_log_stkpnl
ON h_log_stkpnl.MODULE_UNIQUE_ID = h_log_material.MODULE_UNIQUE_ID
where
h_log_material.WO_ID='E11TMB7M05'
and h_log_material.mtrl_type='BL'
输出为4917
SELECT 2
这是第二个select
:
SELECT *
FROM h_log_material
LEFT JOIN h_log_stkpnl
ON h_log_stkpnl.MODULE_UNIQUE_ID = h_log_material.MODULE_UNIQUE_ID
where
h_log_material.WO_ID='E11TMB7M05'
and h_log_material.mtrl_type='BL'
and h_log_stkpnl.op_id like '%STOCK-IN%'
输出为4870
我想得到差异 SELECT 1 - SELECT 2
作为输出,我需要不在select 2中的行。
我试过了,但它返回0.
SELECT *
FROM h_log_material
LEFT JOIN h_log_stkpnl
ON h_log_stkpnl.MODULE_UNIQUE_ID = h_log_material.MODULE_UNIQUE_ID
where
h_log_material.WO_ID='E11TMB7M05'
and h_log_material.mtrl_type='BL'
and not exists
(SELECT *
FROM h_log_material
LEFT JOIN h_log_stkpnl
ON h_log_stkpnl.MODULE_UNIQUE_ID = h_log_material.MODULE_UNIQUE_ID
where
h_log_material.WO_ID='E11TMB7M05'
and h_log_material.mtrl_type='BL'
and h_log_stkpnl.op_id like '%STOCK-IN%')
答案 0 :(得分:3)
第二个SELECT
看起来像是第一个的子集,所以你可以做
SELECT COUNT(*) - COUNT(CASE
WHEN h_log_stkpnl.op_id LIKE '%STOCK-IN%' THEN 1
END)
FROM h_log_material
LEFT JOIN h_log_stkpnl
ON h_log_stkpnl.MODULE_UNIQUE_ID = h_log_material.MODULE_UNIQUE_ID
WHERE h_log_material.WO_ID = 'E11TMB7M05'
AND h_log_material.mtrl_type = 'BL'
修改强>
在您澄清之后,您需要不是COUNT
的列,请尝试使用
SELECT *
FROM h_log_material
LEFT JOIN h_log_stkpnl
ON h_log_stkpnl.MODULE_UNIQUE_ID = h_log_material.MODULE_UNIQUE_ID
AND h_log_stkpnl.op_id LIKE '%STOCK-IN%'
WHERE h_log_material.WO_ID = 'E11TMB7M05'
AND h_log_material.mtrl_type = 'BL'
AND h_log_material.MODULE_UNIQUE_ID IS NULL
您的第一个查询正在执行LEFT JOIN
,但第二个查询的WHERE
子句会将其有效转换为内连接。因此,查询之间的区别应该是那些h_log_stkpnl
中没有匹配或者匹配不是LIKE '%STOCK-IN%'
的行(我认为!)
答案 1 :(得分:1)
你试过吗
and h_log_stkpnl.op_id not like '%STOCK-IN%'
除非存在空值(并且可以补偿这些值),否则应该是差异。
答案 2 :(得分:0)
您没有指定您的平台,但如果您正在运行SQL 2008,则可以使用EXCEPT和INTERSECT来比较两个查询的结果。
答案 3 :(得分:0)
试试吧
SELECT h_log_material.field1,h_log_material.field2
FROM h_log_material
LEFT JOIN h_log_stkpnl
ON h_log_stkpnl.MODULE_UNIQUE_ID = h_log_material.MODULE_UNIQUE_ID
where
h_log_material.WO_ID='E11TMB7M05'
and h_log_material.mtrl_type='BL'
minus
SELECT h_log_material.field1,h_log_material.field2
FROM h_log_material
LEFT JOIN h_log_stkpnl
ON h_log_stkpnl.MODULE_UNIQUE_ID = h_log_material.MODULE_UNIQUE_ID
where
h_log_material.WO_ID='E11TMB7M05'
and h_log_material.mtrl_type='BL'
and h_log_stkpnl.op_id like '%STOCK-IN%'