我傳遞一個郵編列表到一個存儲過程(比如說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