检查另一列中是否存在两列中的任何一列

时间:2018-03-12 09:14:46

标签: sql sql-server

我在Table2(T2)中有两列,在Table1(T1)中有一列。示例数据

  Table2:  
    AccountNr OfferNr  
    123D       ITALY
    45C        Pronto  
    667        Belgium


  Table1  
Description  
"Account Number: 123D Offer Number ITALY"
"Account Number: 45C Offer Number"  
"Account Number: Offer Number Belgium"

如您所见,Table1中的列描述有时包含Table2中的所有两列,有时只包含一列。 我正在尝试列出Table2中的所有行,其中说明中没有AccountNr或OfferNr。 如果至少有一个,那么我就不会列出它。

我尝试的是:

select t2.AccountNr, t2.OfferNr
from Table2 t2
where not exists (select 1 Description
              from Table1 t1
              where t1.Description like ('%' + t2.AccountNr + '%') or  t1.Description like ('%' + t2.OfferNr + '%')
             )

但它似乎丢失数据,例如,如果我在子查询中的where子句中仅使用OfferNr,那么我将获得原始查询中不存在的行,但应该是。

1 个答案:

答案 0 :(得分:1)

如果您希望来自Table1的所有记录Table2中既没有 AccountNr 也没有 OfferNr ,那么以下内容将有效。 顺便说一下,这与你的相同!

SELECT 
    t2.AccountNr, t2.OfferNr
FROM 
    Table2 t2
WHERE
    NOT EXISTS (
        SELECT Description 
        FROM Table1 t1
        WHERE 
          t1.Description LIKE ('%' + t2.AccountNr + '%') OR  
          t1.Description LIKE ('%' + t2.OfferNr + '%')
)

但是,如果您想要Table1的所有记录 AccountNr OfferNr 两者,在Table2中,以下内容将有效。

SELECT 
    t2.AccountNr, t2.OfferNr
FROM 
    Table2 t2
WHERE
    EXISTS (
        SELECT Description 
        FROM Table1 t1
        WHERE 
          t1.Description LIKE ('%' + t2.AccountNr + '%') OR  
          t1.Description LIKE ('%' + t2.OfferNr + '%')
)