不幸的是,我支持的数据库包含很少甚至没有代理/主键,并且没有机会添加一个。所以我离开了使用复合键。
我希望使用复合键列表查询单个表。我可以拥有多达5k的复合键。那我该怎么做呢?以下查询有效,但我必须动态构建它,而不是我见过或不得不做的事情。似乎应该有更好的方法来做到这一点......
select * from dog_manners
where
col1 NOT IN ('', 'abcd')
and
(
-- here are the composite keys (each pair must be unique)
(col2 = 'Scottish Terrier' and col3 = 'black') or
(col2 = 'Golden Retriever' and col3 = 'brown') or
(col2 = 'Golden Retriever' and col3 = 'wheaten') or
(col2 = 'Yorkshire Terrier' and col3 = 'brown') or
etc...
)
如果这是最好的方式,我可以拥有的OR条件数量是否有限制?如果是这样,我将不得不把它分解成更小的块。
答案 0 :(得分:1)
我不知道informix所以我用Google搜索,看起来好像是临时表。一个想法是创建一个并在连接中使用它:
CREATE TEMP TABLE tmp1 ( col2 varchar(20), col3 varchar(20) );
INSERT INTO tmp1 (col2, col3) VALUES ('Scottish Terrier', 'black')
, ('Golden Retriever', 'brown');
SELECT *
FROM dog_manners x
JOIN tmp1
ON tmp1.col2 = x.col2
AND tmp1.col3 = x.col3;
答案 1 :(得分:1)
我不确定我是否建议这样做,但没有更多细节来了解您的要求
但需要动态构建
以下替代方案可行,但可能效率不高:
select * from dog_manners
where
col1 NOT IN ('', 'abcd')
and TRIM(col2)||':'||TRIM(col3) IN
(
'Scottish Terrier:black', 'Golden Retriever:brown',
'Golden Retriever:wheaten', 'Yorkshire Terrier:brown',
...
)
您能否详细说明如何生成这些组合?