2010-11-16 174 views
7

任何人都可以告訴我在兩列的SQL中NOT IN條件的確切語法。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);" 

但這不是工作.....

+0

你需要什麼,列的組合不起作用或者數據不在任何一列中? – HLGEM 2010-11-16 18:18:18

+0

你是什麼意思的兩列? – Hogan 2010-11-16 18:18:21

+0

HLGEM,兩列組合.. – user397316 2010-11-16 18:20:52

回答

17

不能使用IN一個以上的列,但你通常可以達到使用EXISTS同樣的效果:

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

一般語法:

where col not in (items) 

項目可以是

  • 項目列表 - (4,5,3,5,2)('243','3','cdds')或任何其他數據類型。

  • 或者select語句(select hatefulthings from table)


加入6-年後

與不能在所有主流平臺支持的元組,例如

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

在這例如我們選擇everyth從員工表中的員工ID和日期的元組不在包含休假日的表中。

3

你的問題有點不清楚。這是你需要的嗎?

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

這將顯示搜索短語(「Smith」)既不在first_name也不在last_name列中的所有記錄。

1

也許你的意思是

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

這是甲骨文下允許 - 不知道有關SQL Server。

分享和享受。

+0

哦,你好,我嘗試了相同的語法,但它沒有工作......我正在訪問平臺上工作,我應該在VBA中寫入查詢。 – user397316 2010-11-16 18:33:01

+0

爲什麼標籤說sql如果您正在訪問? – Hogan 2010-11-16 19:03:48

+0

我已經重申了這個問題,以便MS Access專家可以看看這個問題。 – 2010-11-16 19:25:55

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

我看到,你表示這是爲訪問

+0

結帳我的查詢一次.. 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)不在(SELECT tblEventLog.PartNumber,tblEventLog.PartNumberChgLvl FROM tblEventLog WHERE tblEventLog.EventTypeSelected ='pn REMOVED From Wrapper')AND tblEventLog.TrackingNumber =「」「&tempTrackingNumber&」「」AND tblEventLog.TrackingNumber = tblRevRelLog_Detail.RevRelTrackingNumber;「 – user397316 2010-11-16 19:10:24

+0

我試過這種方式,它沒有工作.. – user397316 2010-11-16 19:12:49

+0

我沒有工作,你能更模糊嗎? – JeffO 2010-11-17 14:09:57

0

目前還不清楚你問什麼,但據我瞭解,你想有一個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 ...)來轉換爲等於然後相應地匹配它。

+0

更新了我的查詢,請查看我的問題... – user397316 2010-11-16 19:30:32