2013-03-14 97 views
0

我以为我有一个非常简单的查询来执行,但我似乎无法使其工作。无法在MAMP上的2列上应用WHERE/AND WHERE/AND

我有这样的表2列:

version_id  trim_id 
    1    15 
    1    25 
    1    28 
    1    30 
    1    35 
    2    12 
    2    25 
    2    33 
    2    48 
    3    11 
    3    25 
    3    30 
    3    32 

我试图让任何版本的id有说子集trim_id年代。比方说,有trim_id的25和30我明显的企图是所有VERSION_ID的:

SELECT * FROM table WHERE trim_id=25 AND trim_id=30 

我期待有VERSION_ID 1和3的结果,而是我什么也没得到。

我与最新版本MAMP,其中有一些奇怪的行为,就像在这种情况下,它只是告诉我它“正在载入”工作,从来没有给我一个错误信息或东西。但是当没有数据要返回时通常就是这种情况。

这是InnoDB,如果有帮助。

感谢您的输入。

回答

1

您的查询不工作,因为你正在使用ANDtrim_id不能在同一时间两个不同的值,所以你需要申请Relational Division得到的结果。

您将需要使用类似以下内容:

SELECT version_id 
FROM yourtable 
WHERE trim_id in (25, 30) 
group by version_id 
having count(distinct trim_id) = 2 

SQL Fiddle with Demo

这将返回version_id值同时具有2530。然后,如果你想以包括最终结果附加列,您可以展开查询:

select t1.version_id, t1.trim_id 
from yourtable t1 
where exists (SELECT t2.version_id 
       FROM yourtable t2 
       WHERE t2.trim_id in (25, 30) 
       and t1.version_id = t2.version_id 
       group by t2.version_id 
       having count(distinct t2.trim_id) = 2); 

SQL Fiddle with Demo

+0

非常感谢,bluefeet。这就是诀窍!我怀疑AND并不适用,但需要几代人才能到达关系部的事情。你为我节省了很多时间。如果可以的话,1000分给你。 – BernardA 2013-03-14 11:01:49

+0

@BernardA乐意帮忙! :) – Taryn 2013-03-14 11:03:11

0
SELECT * 
FROM table 
WHERE trim_id IN(25,30) 
+0

谢谢Raheel,但是这不是我所期待的。查询的结果是version_id的1,2,3,因为所有的版本都有25或30. Version_id 2的确有25但不是30.我需要version_id的版本号为25和30.在这个例子中,version_id的版本号为1和3. – BernardA 2013-03-14 10:35:14