2013-02-18 48 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 
相关问题