我需要确定表WhereItems中的哪些项目,以及哪些项目也存在于ItemMain中,哪些项目不存在。
问题在于一些UPC在开始时为0而有些则没有。
所以我尝试了这个查询,但结果看起来不太好。
SELECT * from OtherItems
WHERE UPC like '0%' and upc not in(select '0' + UPC from itemmain)
Or UPC not in(select UPC from itemmain))
有人可以指导我在这里做错了吗?
答案 0 :(得分:3)
select *
from OtherItems
where not exists ( select *
from itemmain
where UPC=OtherItems.UPC or '0'+UPC=OtherItems.UPC )
或者也许:
select *
from OtherItems
where ( UPC like '0%'
and not exists (select * from itemmain where '0'+UPC=OtherItems.UPC) )
or ( UPC not like '0%'
and not exists (select * from itemmain where UPC=OtherItems.UPC) )
答案 1 :(得分:3)
UPC通常没有字母字符。为什么不将它们转换成一个数字,如果它存在于一个而不是另一个上,则删除前导零?
SELECT *
FROM OtherItems A
WHERE NOT EXISTS
(SELECT 1
FROM ItemMain B
WHERE CAST(A.UPC as DECIMAL(18)) = CAST(B.UPC) AS DECIMAL(18))
答案 2 :(得分:0)
您的逻辑需要在OR周围括号:
SELECT * from OtherItems
WHERE UPC like '0%' and
(upc not in(select '0' + UPC from itemmain)
Or UPC not in(select UPC from itemmain))
使用括号,AND优先,因此您可以有效地获得(A AND B) OR C