【发布时间】:2011-02-14 22:30:40
【问题描述】:
假设我有一个名为 my_table 的表,其中包含 primary_key table_pk 和三个分别名为 X_fk、Y_fk 和 Z_fk 的可空字段(外键),以及另一个名为 data 的字段。表 X、Y 和 Z 都有一个主键字段和一个名称字段(例如 {X_pk, X_name}, {Y_pk, Y_name}, {Z_pk, Z_name})。
在给定表 X、Y 和 Z 中的名称的情况下,我想要一个从 my_table 中唯一返回一行的查询。
SELECT table_pk
FROM my_table
WHERE
X_fk = (SELECT X_pk FROM X WHERE X_name = ?)
AND
Y_fk = (SELECT Y_pk FROM Y WHERE Y_name = ?)
AND
Z_fk = (SELECT Z_pk FROM Z WHERE Z_name = ?)
当我想找到行 (X_Name, Y_Name, Z_Name) = ('XXX', 'YYY', NULL) 时,这不起作用,因为 Z_fk = NULL 永远不会导致 TRUE。如何修改上述查询以从表中提取一个唯一条目,以说明某些外键为 NULL 的唯一条目?
【问题讨论】:
标签: sql sql-server sql-server-2008-r2