我传递一个邮编列表到一个存储过程(比如说11111,11112,11113,11114,11115),邮政编码表只包含几行(比如11111,11112,11113),现在I想写一个查询返回表中不存在的邮政编码(11114和11115)SQL服务器查询帮助
任何人都可以请帮我写一个这样的查询吗?
在此先感谢。
我传递一个邮编列表到一个存储过程(比如说11111,11112,11113,11114,11115),邮政编码表只包含几行(比如11111,11112,11113),现在I想写一个查询返回表中不存在的邮政编码(11114和11115)SQL服务器查询帮助
任何人都可以请帮我写一个这样的查询吗?
在此先感谢。
您已使用JOIN
构建您的第一个查询。
现在,你需要一个RIGHT JOIN/WHERE,包括你的拉链列表中的所有项目,其对压缩表记者记录null
编辑:下面是一个简单
CREATE TABLE ZipCodesTable(Code int NOT NULL)
CREATE TABLE ZipCodesList (Code int NOT NULL)
INSERT INTO ZipCodesTable (Code) VALUES (11111)
INSERT INTO ZipCodesTable (Code) VALUES (11112)
INSERT INTO ZipCodesTable (Code) VALUES (11113)
INSERT INTO ZipCodesList (Code) VALUES (11111)
INSERT INTO ZipCodesList (Code) VALUES (11112)
INSERT INTO ZipCodesList (Code) VALUES (11113)
INSERT INTO ZipCodesList (Code) VALUES (11114)
INSERT INTO ZipCodesList (Code) VALUES (11115)
SELECT ZipCodesList.Code
FROM ZipCodesTable RIGHT
JOIN ZipCodesList
ON ZipCodesTable.Code = ZipCodesList.Code
WHERE ZipCodesTable.Code IS NULL
这文章使用CTE采取您的字符串的条目,转换为表,以便您可以包含在查询中:http://www.sqlservercentral.com/articles/CTE/67974/
您需要在网站上注册才能查看该文章作为供参考。与权威对抗! – 2009-12-15 19:59:43
我的不好。我认为这就像是。 – JeffO 2009-12-16 02:09:44
不知道您的确切实施,这个快速和二rty查询应该适应你正在尝试的内容。选择从您通过列表,它是不是在邮政编码的全表邮编:
SELECT ZipCode
FROM PassedList
WHERE ZipCode NOT IN (
SELECT DISTINCT ZipCode
FROM ZipCodeTable
)
无需在SQL创建表的存储过程使用临时表。如果你需要以字符串的形式传入,使用这个。如果你有一个表值参数,你可以把它们作为表格传入。
CREATE PROCEDURE spCheckZip
@Zips varchar(256) --space delimited list of zips
AS
IF OBJECT_ID('tempdb..#ZipCheck') IS NOT NULL
DROP TABLE #ZipCheck
CREATE TABLE #ZipCheck (zipcode string) --Note string not int for zips with leading 0's.
IF CharIndex(' ',@Zips) > 1
BEGIN
Declare @StartPos as int
Declare @ZipCd As Varchar(16)
set @StartPos = 2
set @ZipCd = substring(@Zips,1,CharIndex(',',@Zips))
WHILE @StartPos > 1 and @StartPos < Len(@Zips)
BEGIN
INSERT Into #ZipCheck (zipcode)
SELECT Substring(@ZipCd,1,len(@ZipCd)-1)
SET @StartPos = charindex(',',@Zips, @StartPos)+1
SET @ZipCd = substring(@Zips,@StartPos,CharIndex(',',@Zips))
END
END
SELECT ZipCode
FROM ZipCheck LEFT JOIN YourZipTable on ZipCheck.zipcode=YourZipTable.YourZipField
WHERE YourZipTable.YourZipField IS NULL
你如何将这个邮政编码列表传入你的存储过程? – 2009-12-15 17:04:17
你想比较一个邮政编码列表到你在数据库中的列表,并最终得到一个不在你的数据库中的邮政编码列表? – jim 2009-12-15 17:11:41