0

我以为我有一个非常简单的查询要执行,但我似乎无法让它工作。

我有这个有 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

我正在尝试获取任何包含 trim_id 子集的版本 ID。假设所有具有 trim_id 25 和 30 的 version_id。我明显的尝试是:

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

结果,我期望获得 version_id 1 和 3,但我什么也没得到。

我正在使用最新版本的 MAMP,它有一些奇怪的行为,就像在这种情况下它只是告诉我它的“正在加载”并且从不给我错误消息或其他东西。但这通常是没有数据要返回的情况。

这是 InnoDB,如果有帮助的话。

感谢您的输入。

4

2 回答 2

1

您的查询不起作用,因为您正在使用AND并且trim_id不能同时具有两个不同的值,因此您需要应用关系除法来获得结果。

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

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同时具有25和的值30。然后,如果您想在最终结果中包含其他列,可以将查询扩展为:

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

于 2013-03-14T10:37:17.453 回答
0
SELECT *
FROM table
WHERE trim_id IN(25,30)
于 2013-03-14T10:29:34.107 回答