【发布时间】:2011-06-05 06:24:43
【问题描述】:
可能重复:
Howto build a SQL statement with using IDs that might not be available in the table?
大家好,我尝试用一些未知变量构建 SQL 语句。 我想从表dbo.pmd中选择省、区、公社和村。 由于只存储了 ID,我需要从值表中读取名称。 这对于省和区来说是没有问题的,因为它们将始终填写在表 dbo.pmd 中。无论如何,公社和村庄不是强制性的,因此可能不会被填补。 如果我比较 dbo.pmd 和 dbo.vhcs(公社)和 dbo.pmd 和 dbo.vhv(村庄)之间的 ID(如果 dbo.pmd 表中没有存储值),就会出现问题。
表格如下所示:
表:dbo.pmd
字段:省、区、公社、村(存值为身份证号)
表: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 Ponies:这里的情况更复杂,这就是为什么这篇文章中的结果不起作用。
标签: sql sql-server tsql sql-server-2008