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