我正在寫一個查詢,它給了我奇怪的結果或者我做錯了什麼。我正在使用IN運營商在其中條款。我從應用程序復原country_id(可爲空),province_id(可爲空)和city_id(可爲空)。如果city_id不爲空,那麼我提取所有centre_id,該city_id存儲在臨時表中。如果city_id爲null,並且province_id不爲空的話,我提取所有centre_id存在於該province_id並以同樣的方式,如果city_id和province_id都是空的話,我提取centre_id中存在的COUNTRY_ID,如果所有3個爲空的話,我提取所有centre_id並存儲在臨時表象下面這樣:SQL Server IN操作符與值查詢和IN操作符之間的區別值
DECLARE @serviceCenter TABLE (service_center_id INT)
IF (@city_id IS NOT NULL)
BEGIN
INSERT INTO @serviceCenter
SELECT service_centre_id
FROM ServiceCentre
WHERE city_id= @city_id
END
ELSE IF (@province_id IS NOT NULL)
BEGIN
INSERT INTO @serviceCenter
SELECT service_centre_id
FROM ServiceCentre
INNER JOIN City ON City .city_id= ServiceCentre.city_id
INNER JOIN Province ON Province.province_id= City.province_id
WHERE Province.province_id= @province_id
END
ELSE IF (@country_id IS NOT NULL)
BEGIN
INSERT INTO @serviceCenter
SELECT service_centre_id
FROM ServiceCentre
INNER JOIN City ON City .city_id= ServiceCentre.city_id
INNER JOIN Province ON Province.province_id= City.province_id
INNER JOIN Country ON Country.country_id= City.country_id
WHERE Country.country_id = @country_id
END
ELSE
BEGIN
INSERT INTO @serviceCenter
SELECT service_centre_id
FROM ServiceCentre
END
現在在服務中心的基礎上我需要得到如下的交易計數。
**Select Count(1)
From Tranactions
where service_centre_id IN (Select service_centre_id From @serviceCenter)**
現在問題是這個查詢給出了所有center_id的所有交易。我檢查了它。如果臨時表中只有一個id,並且值爲1,那麼它會爲我提供所有事務。當我運行下面的硬編碼值查詢,它給出正確的結果
**Select Count(1)
From Tranactions
where service_centre_id IN (1)**
什麼之間不同的地方service_centre_id IN(選擇service_centre_id從@serviceCenter)和其中service_centre_id(1)。 什麼問題?
這應該工作。其他事情正在發生。 – Paparazzi
是的這應該工作,但我不知道這個查詢有什麼問題。 – Umer