[英]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.