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 を使用していますが、この場合、「LOADING」と表示されるだけで、エラー メッセージなどは表示されません。しかし、それは通常、返すデータがない場合です。

それが役立つ場合、これは InnoDB です。

ご意見ありがとうございます。

4

2 に答える 2

1

ANDを使用してtrim_idいて、同時に2つの異なる値を持つことはできないため、クエリは機能しません。そのため、結果を取得するには、リレーショナル除算を適用する必要があります。

次のようなものを使用する必要があります。

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

SQL FiddlewithDemoを参照してください。

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 FiddlewithDemoを参照してください

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