1

ネストされた SELECT SQL ステートメントを作成しようとしています。すべての値と ID を保存し、複数の値を満たす行を選択したいと考えています。Java を使用して SELECT ステートメントを生成するにはどうすればよいですか? 例えば、

ID VALUE
1  RED
2  BIG
1  SMALL
1  SMOOTH
2  TALL

.....

赤くて小さいアイテムを選択するには、ステートメントは次のようになります。

SELECT * 
FROM table 
WHERE table.value = RED AND 
       id IN (SELECT * 
              FROM table 
              WHERE table.value = SMALL AND id IN (...))
4

3 に答える 3

1

このタイプの問題は、Relational Division

SELECT ID
FROM tableName
WHERE VALUE IN ('SMALL','SMOOTH')
GROUP BY ID
HAVING COUNT(*) = 2

1ID には両方のレコードが含まれているため、上記のクエリが実行されます。

valueすべての に対して一意の制約が適用されていない場合はIDDISTINCTが必要です。

SELECT ID
FROM tableName
WHERE VALUE IN ('SMALL','SMOOTH')
GROUP BY ID
HAVING COUNT(DISTINCT VALUE) = 2

その他

于 2013-01-29T01:07:28.693 に答える
0
select ID
from MyTable
where VALUE in ('RED', 'SMALL')
group by ID
having count(distinct VALUE) = 2

SQLフィドルの例

結果

| ID |
------
|  1 |
于 2013-01-29T01:08:06.710 に答える
0

これにアプローチする一般的な方法は次のとおりです。

select id
from t
group by id
having max(case when value = 'Red' then 1 else 0 end) = 1 and
       max(case when value = 'Small' then 1 else 0 end) = 1

つまり、セットのメンバーシップは、havingステートメントの句になります。これらは、包含と除外 (= 0の代わりに使用= 1) とオプション (のor代わりに使用) の両方にすることができますand

于 2013-01-29T01:45:04.417 に答える