簡體   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