忽略查询两边的第一个'0'

时间:2012-11-28 18:43:29

标签: sql sql-server sql-server-2012

我需要确定表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))

有人可以指导我在这里做错了吗?

3 个答案:

答案 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