war*_*oxx 5 sql sql-server select sql-server-2008 composite-primary-key
我有一个带有组合键的表,我想用该键执行 SELECT 查询,有没有办法为组合键添加名称或执行查询而无需添加 AND
比方说:
SELECT * FROM MyTable WHERE PRIMARY KEY = 12345
Run Code Online (Sandbox Code Playgroud)
主键是复合键
不,不存在 SELECT * FROM MyTable WHERE PRIMARY KEY = 'PrimaryKeyName' 的概念。换句话说,谓词(WHERE 子句)不允许这样做。您需要列出谓词中复合主键中包含的所有列。
一个潜在的解决方案是构建一个表来存储事实表的所有主键组合。您可以向该表添加一个标识字段,并使其成为表上的外键约束。然后,您的谓词使用单个外键列。
您还可以通过其他方式编写等效逻辑。例如:
where not (key1 <> val1 or key2 <> val2)
Run Code Online (Sandbox Code Playgroud)
或者:
select t.*
from (select t.* from t where key1 = val1) t
where t.key2 = val2
Run Code Online (Sandbox Code Playgroud)
也许:
where t.key1 + '|' + t.key2 = val1 + '|' + val2
Run Code Online (Sandbox Code Playgroud)
(假设|不存在任何一个值)。
或者:
where (case when t.key1 <> val1 then 0
when t.key2 <> val2 then 0
else 1
end) = 1
Run Code Online (Sandbox Code Playgroud)
甚至:
where (case when t.key1 = val1 then 1 end) = (case when t.key2 = val2 then 1 end)
Run Code Online (Sandbox Code Playgroud)
但除了使用 之外,没有合理的AND替代方案。
我应该注意到,我创建的表几乎总是将标识列作为主键。我不喜欢复合主键,因此您可能想使用标识列。
| 归档时间: |
|
| 查看次数: |
18675 次 |
| 最近记录: |