【发布时间】:2009-07-29 17:27:33
【问题描述】:
有人可以提示一下吗? :
我有一个表,比如说 tblA,其中我有 id1 和 id2 作为列和索引(id1,id2)。 我想选择 id2 属于几组的 id1。所以我想说
select id1 from tblA
where id2 in (val1,val2,val3 ...)
union
select id1 from tblA
where id2 in (val4,val2,val3 ...)
union
(...)*
假设我们在表 A 中有以下内容:
(1,1)
(1,2)
(1,3)
(1,4)
(1,5)
(2,1)
(2,2)
(2,3)
现在我想要所有具有id2 in (3,4) 的id1s。
所以我想得到的是id1 = 1。
2 不应出现,因为虽然我们有一个关系 (2,3),但我们没有 (2,4)。
任何想法如何执行此查询?我猜如果 (...) 增长太多,上面的方法会出现性能问题!?谢谢。
问候
【问题讨论】:
-
好的,所以我将尝试用一个例子来解释它。我尝试了您的两个查询,但不是我想要的。假设我们在表 A 中有以下内容:(1,1),(1,2),(1,3),(1,4),(1,5),(2,1),(2, 2),(2,3)。现在我想要所有在(3,4)中具有 id2 的 id1。所以我想得到它的id1s =“1”。 “2”不应该出现,因为尽管我们有一个关系(2,3)我们没有(2,4)。我说清楚了吗?这有点难以解释......无论如何,谢谢
-
只是出于好奇,为什么? :) 下面有几个答案看起来可以正常工作。哪一个最有意义,如果没有为什么其他东西可能对您更好,就无法回答?如果事情不经常改变,您可以用大量查询填写您的列表,然后更新它们。然后,您的答案将是即时的。创建一个只有 id1 和一个布尔值的简单临时表可以帮助您过滤每个集合(即在每次传递中找到匹配的那些)。
标签: sql performance mysql