2013-02-18 23 views
0

我有一個SQL表,其中包含一列中的城市列表。 我有一個單獨的城市列表,我想找出存在但未出現在表格中的城市,但不分別出現在該列表中。SQL:根據字符串值列表獲取值並不存在於表中

CityId CityName 
1   ABC 
2   DEF 
3   GHI 
4   JKL 
5   MNO 

說名單是: 'ABC', 'DEF', 'MNO', '焊接工藝評定', 'STU'

所以作爲輸出我想兩個列表:

目前在表:

'ABC' 
'DEF' 
'MNO' 

表不存在:

'PQR' 
'STU' 
+0

這是一個字符串列表或從您的dB表中的值? – sgeddes 2013-02-18 16:00:45

+0

這是一個字符串列表。 – Brij 2013-02-18 16:09:15

回答

1

我相信,你的列表是一個字符串/ VARCHAR,那麼你需要的分裂功能,第一個獲得所有部件:

1)然後可以使用INNER JOIN找到所有這些都在表:

SELECT CityId,CityName 
FROM Cities c 
INNER JOIN dbo.Split('ABC,DEF,MNO,PQR,STU',',')x 
ON c.CityName = x.Item; 

2)和NOT EXISTS找到所有這些都在列表中,但沒有在表中:

​​

DEMO

結果:

1)

CITYID CITYNAME 
    1  ABC 
    2  DEF 
    5  MNO 

2)

CITYNAME 
PQR 
STU 

這是我的分裂功能:

CREATE FUNCTION [dbo].[Split] 
(
    @ItemList NVARCHAR(MAX), 
    @delimiter CHAR(1) 
) 
RETURNS @IDTable TABLE (Item VARCHAR(50)) 
AS  

BEGIN  
    DECLARE @tempItemList NVARCHAR(MAX) 
    SET @tempItemList = @ItemList 

    DECLARE @i INT  
    DECLARE @Item NVARCHAR(4000) 

    SET @tempItemList = REPLACE (@tempItemList, ' ', '') 
    SET @i = CHARINDEX(@delimiter, @tempItemList) 

    WHILE (LEN(@tempItemList) > 0) 
    BEGIN 
     IF @i = 0 
      SET @Item = @tempItemList 
     ELSE 
      SET @Item = LEFT(@tempItemList, @i - 1) 
     INSERT INTO @IDTable(Item) VALUES(@Item) 
     IF @i = 0 
      SET @tempItemList = '' 
     ELSE 
      SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i) 
     SET @i = CHARINDEX(@delimiter, @tempItemList) 
    END 
    RETURN 
END 
0

它看起來像你的 「清單」在一張桌子裏。這應該是簡單的:

select distinct value from list where value in (select distinct city from cities) 

和:

select value from list exclude select city from cities 
0

目前在表中的值:

SELECT v.valueName AS PresentInTable from (VALUES ('ABC'),('DEF'),('MNO'),('PQR'),('STU')) 
v(valueName) 
LEFT JOIN Cities c on c.CityName = v.valueName 
WHERE c.CityId IS NOT NULL 

不存在於表:

SELECT v.valueName AS NotPresentInTable from (VALUES ('ABC'),('DEF'),('MNO'),('PQR'),('STU')) 
v(valueName) 
LEFT JOIN Cities c on c.CityName = v.valueName 
WHERE c.CityId IS NULL 
相關問題