在SQL中不是条件

use*_*316 9 sql ms-access

任何人都可以告诉我两列中SQL的NOT IN条件的确切语法.

这是我在VBA中编写的查询.

strNewSql = "SELECT distinct(tblRevRelLog_Detail.PartNumber), tblRevRelLog_Detail.ChangeLevel, tblRevRelLog_Detail.ID FROM tblRevRelLog_Detail LEFT JOIN tblEventLog ON tblRevRelLog_Detail.PartNumber = tblEventLog.PartNumber"

strNewSql = strNewSql & " WHERE (tblEventLog.PartNumber) Not In(SELECT tblEventLog.PartNumber FROM tblEventLog WHERE tblEventLog.EventTypeSelected = 'pn REMOVED From Wrapper') AND tblEventLog.TrackingNumber = """ & tempTrackingNumber & """ AND tblEventLog.TrackingNumber =  tblRevRelLog_Detail.RevRelTrackingNumber;"
Run Code Online (Sandbox Code Playgroud)

我想改变这个子查询,它应该适用于两列的组合,如下所示:

strNewSql = "SELECT tblRevRelLog_Detail.PartNumber, tblRevRelLog_Detail.ChangeLevel, tblRevRelLog_Detail.ID FROM tblRevRelLog_Detail LEFT JOIN tblEventLog ON tblRevRelLog_Detail.PartNumber = tblEventLog.PartNumber"

strNewSql = strNewSql & " WHERE (((tblEventLog.PartNumber, tblEventLog.PartNumberChgLvl) Not In(SELECT tblEventLog.PartNumber,tblEventLog.PartNumberChgLvl FROM tblEventLog WHERE tblEventLog.EventTypeSelected = 'pn REMOVED From Wrapper') AND tblEventLog.TrackingNumber = """ & tempTrackingNumber & """ AND tblEventLog.TrackingNumber =  tblRevRelLog_Detail.RevRelTrackingNumber);"
Run Code Online (Sandbox Code Playgroud)

但这不起作用.....

Dan*_*haw 18

您不能使用IN多个列,但通常可以使用EXISTS以下方法实现相同的效果:

SELECT *
FROM tbl1
WHERE NOT EXISTS
(
    SELECT *
    FROM tbl2
    WHERE tbl2.col1 = tbl1.col1
        AND tbl2.col2 = tbl1.col2
)
Run Code Online (Sandbox Code Playgroud)


Hog*_*gan 5

一般语法:

where col not in (items)
Run Code Online (Sandbox Code Playgroud)

物品可以

  • 项目清单- (4,5,3,5,2)('243','3','cdds')或任何其它数据类型.

  • 或者是一个选择语句 (select hatefulthings from table)


6年后加入

例如,所有主要平台都支持NOT IN的元组

SELECT *
FROM empoyee
WHERE (empID, @date) NOT IN 
  (SELECT empID, vacationDay
   FROM empVacation
  )
Run Code Online (Sandbox Code Playgroud)

在此示例中,我们从employee表中选择员工ID和日期的元组不在包含休假日的表中的所有内容.