繁体   English   中英

在SQL中不是条件

[英]NOT IN condition in SQL

任何人都可以告诉我两列中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;"

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

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);"

但这不起作用.....

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

SELECT *
FROM tbl1
WHERE NOT EXISTS
(
    SELECT *
    FROM tbl2
    WHERE tbl2.col1 = tbl1.col1
        AND tbl2.col2 = tbl1.col2
)

一般语法:

where col not in (items)

物品可以

  • 项目列表 - (4,5,3,5,2)('243','3','cdds')或任何其他数据类型。

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


6年后加入

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

SELECT *
FROM empoyee
WHERE (empID, @date) NOT IN 
  (SELECT empID, vacationDay
   FROM empVacation
  )

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

你的问题有点不清楚。 这是你需要的吗?

SELECT *
FROM
  MY_TABLE MT
WHERE 'Smith' NOT IN (MT.FIRST_NAME)
  AND 'Smith' NOT IN (MT.LAST_NAME)

这将显示搜索短语(“Smith”)既不在first_name列也不在last_name列中的所有记录。

也许你的意思

SELECT *
  FROM MY_TABLE
  WHERE (FIRST_NAME, LAST_NAME) NOT IN (SELECT FIRST_NAME, LAST_NAME
                                          FROM SOME_OTHER_TABLE)

这在Oracle下是允许的 - 不确定SQL Server。

分享和享受。

Select * from some_table
where (((Some_Value) Not IN (Select Column1 & Column2 from Some_Other_Table)));

我看到你指出这是Access的地方

目前尚不清楚你在问什么,但我认为你想要一个基于两列而不是一列的NOT IN条件。

例如,假设您有一个名为F_Name的列,另一个名为L_Name(大小均为变量),并且您希望从已将它们组合为NAME的另一个表中排除这些名称的特定组合。 在这种情况下,你可以这样做:

select F_name
     , L_name
     , col1
     , coln
  from mytable1
 where F_name                  -- First name (variable length)
    || ' '                     -- appended to a blank space
    || L_name                  -- appended to the last name (v)
       not in                  -- is not one of these names
     ( select name
         from mytable2
        where ...
     )

此查询的主要问题是您必须正确地获取格式,以便它们可以完全匹配。

如果您正在处理具有不同类型的字段组合(如数字和时间戳),则可以使用任何转换命令(DECIMAL,INTEGER,CHAR,SUBSTR ...)将其转换为相等的文本,然后将其匹配因此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM