6

私はこれらの2つのテーブルを持っています:

SW_ITEM:

ID  SWID  ITEM_ID
1    1      99
2    2      99
3    5      99
4    2      100
5    1      100
6    1      101
7    2      102

ITEM:

  ID   FILENAME
  99      abc
  100     def
  101     geh
  102     ijk

columnは、 tableITEM_IDの列への外部キーです。IDITEM

したがって、SWID「1」および「2」を持つすべてのファイル名が必要です(ITEMID 99および100になるため、ファイル名は「abc」および「def」です)

ここITEM_IDで、同じ SWID を持つエントリが複数ある可能性があるため、次の SQL を使用できないと言わざるを得ません。

SELECT ITEM_ID FROM SW_ITEM
WHERE SWID  IN (1,2) 
GROUP BY ITEM_ID
HAVING COUNT(ITEM_ID) = 2

SWID 1 と 2 を持つすべてのエントリを取得する他の可能性はありますか (SWID ごとに結合を作成することもオプションではありません。エントリが多いと非常に遅くなるためです)。

敬具

4

2 に答える 2

15

の代わりにDISTINCTinCOUNTと countを使用する必要があります。SWIDITEM_ID

SELECT ITEM_ID FROM SW_ITEM
WHERE  SWID IN (1,2) 
GROUP  BY ITEM_ID
HAVING COUNT(DISTINCT SWID) = 2;

このデモをチェックしてください。

すべてのファイル名を取得するには、次を試してください。

SELECT ITEM_ID, FILENAME
FROM   ITEM JOIN SW_ITEM ON ITEM.ID = SW_ITEM.ITEM_ID
WHERE  SWID IN (1,2) 
GROUP  BY ITEM_ID
HAVING COUNT(DISTINCT SWID) = 2;

デモ

于 2013-07-29T16:14:33.727 に答える