我正在写一个查询,它给了我奇怪的结果或者我做错了什么。我正在使用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