簡體   English   中英

按多列顯示一個表中的記錄,該表不在另一個表中

[英]Display records from one table which is not in another table by multiple columns

我正在使用SQL Server 2012 Express進行以下查詢。

表_A

CLIENT              TYPEOFWORK               ACTIVITY
-----------------------------------------------------
CLIENT A            WORK A                   ACTIVITY A
CLIENT A            WORK B                   ACTIVITY B
CLIENT A            WORK C                   ACTIVITY C
CLIENT A            WORK C                   NULL

表_B

CLIENT               TYPEOFWORK                 STATUS
--------------------------------------------------------
CLIENT A             WORK C                     COMPLETED

我想從顯示記錄Table_A這是不是在Table_B通過clienttypeofwork

我需要以下輸出。

CLIENT             TYPEOFWORK                 ACTIVITY
------------------------------------------------------
CLIENT A            WORK A                    ACTIVITY A
CLIENT A            WORK B                    ACTIVITY B

我嘗試過NOT IN但僅適用於一列

先感謝您

嘗試一下NOT EXISTS

這是輕松的完整方案:

CREATE TABLE #table_a(CLIENT VARCHAR(50), TYPEOFWORK VARCHAR(50), ACTIVITY VARCHAR(50))
INSERT INTO #table_a VALUES
('CLIENT A', 'WORK A', 'ACTIVITY A'),
('CLIENT A', 'WORK B', 'ACTIVITY B'),
('CLIENT A', 'WORK C', 'ACTIVITY C'),
('CLIENT A', 'WORK C', NULL)

CREATE TABLE #table_b(CLIENT VARCHAR(50), TYPEOFWORK VARCHAR(50), STATUS VARCHAR(50))
INSERT INTO #table_b values
('CLIENT A', 'WORK C', 'COMPLETED')

SELECT 
    a.client,
    a.typeofwork,
    a.activity
FROM #table_a a
WHERE NOT EXISTS(SELECT 1 FROM #table_b b 
                 WHERE a.client = b.client AND a.typeofwork = b.typeofwork)

輸出:

client      typeofwork  activity
----------------------------------
CLIENT A    WORK A      ACTIVITY A
CLIENT A    WORK B      ACTIVITY B

我假設您希望客戶端列匹配並且工作類型不相同,對嗎? 如果是這樣,您可以按以下方式保留聯接條件:

SELECT A.CLIENT, A.TYPEOFWORK, A.STATUS
FROM TABLE_A A
LEFT JOIN TABLE_B B ON B.CLIENT = A.CLIENT AND 
A.TYPEOFWORK <> B.TYPEOFWORK
WHERE B.CLIENT IS NULL
SELECT A.CLIENT, A.TYPEOFWORK, A.ACTIVITY
FROM TABLE_A A
LEFT JOIN TABLE_B B 
ON A.CLIENT = B.CLIENT 
AND A.TYPEOFWORK = B.TYPEOFWORK
WHERE B.CLIENT IS NULL 
OR B.TYPEOFWORK IS NULL;

嘗試使用以下查詢:

SELECT * FROM Table_A
WHERE 
  NOT EXISTS (
    SELECT * FROM Table_B WHERE CLIENT = Table_A.CLIENT AND TYPEOFWORK = Table_A.TYPEOFWORK
  )

希望它能達到您的目的。 在此處查看演示

嘗試這個:

Select * from Table_A 
where Client NOT IN (Select Client from Table_B)
and TypeOFWork NOT IN (Select TypeOfWork from Table_B)

嘗試以下方法:

SELECT A.*
FROM TABLE_A A
LEFT JOIN TABLE_B B ON B.CLIENT = A.CLIENT AND A.TYPEOFWORK = B.TYPEOFWORK
WHERE B.[STATUS] IS NULL

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM