可能重复:
Howto build a SQL statement with using IDs that might not be available in the table?SQL语句 “动态” where子句
你好在一起,我尝试建立一个SQL语句与一些未知的变数。 我想从表dbo.pmd中选择省,区,公社和村庄。 由于只存储了ID,我需要从值表中读取名称。 这对于省和地区来说没有问题,因为它们将始终填充在表dbo.pmd中。无论如何,公社和村庄不是强制性的,可能因此没有填补。 如果我比较dbo.pmd和dbo.vhcs(communes)和dbo.pmd和dbo.vhv(乡村)之间的ID(如果dbo.pmd表中没有存储值),这就是问题所在。
的表是这样的:
表:dbo.pmd
字段:省,区,公社,村(储值是ID号)
表:dbo.vhp
领域:COUNTRY_ID,province_id,province_en(省名)
表:dbo.vhd
领域:province_id,district_id,district_en(区的名称)
表:dbo.vhc2
领域:district_id,commune_id,commune_en(公社的名字)
表:dbo.vhv
领域:commune_id,village_id,village_en(公社的名字)
我目前的声明看起来像这样:
SELECT pmd.patient_code, pmd.last_name, pmd.first_name, pmd.age, pmd.sex, pmd.province, pmd.district, pmd.commune, pmd.village
FROM dbo.pmd AS pmd
INNER JOIN dbo.vhp AS vhp
ON pmd.province = vhp.province_id
INNER JOIN dbo.vhd AS vhd
ON pmd.district = vhd.district_id
INNER JOIN dbo.vhc2 AS vhc2
ON (pmd.commune is NULL OR (pmd.commune = vhc2.commune_id))
INNER JOIN dbo.vhv AS vhv
ON (pmd.village is NULL OR (pmd.village = vhv.village_id))
ORDER BY pmd.last_name
我在我的数据库中有两个条目。一个commune_id和village_id = NULL的条目,一个commune_id和village_id =一些ID号。
我在~2分钟后停止执行了这条语句,并且有:8273612行都具有相同的值,只显示带有commund_id和village_id的条目等于NULL。
我使用Microsoft SQL Server 2008
@OMG小马:这里这种情况比较复杂这就是为什么结果在这篇文章中不起作用。 – Daniel 2011-06-02 02:17:19