0

1 つのクエリでテーブルから適切なデータを選択するのに問題があります。できるか不安です。

properties:
- id
- name

facilities:
- id
- name

property_facilities:
- property_id
- facility_id

上記のスキーマでわかるように、各プロパティには 1 つ以上の施設を含めることができます。コードのある時点で、いくつかの機能を持つプロパティ ID のリストが必要です。

疑似 SQL:

SELECT property_id
FROM property_facilities
WHERE
  facility_id IN (8, 12)

施設 8 と 12 の両方を含むプロパティ ID のリストが必要なので、これは明らかに機能しません。どうすればこれを達成できますか?

4

2 に答える 2

2

予想される数の一致する ID を持つ HAVING 句を追加すると、次のようになります。

SELECT property_id
FROM property_facilities
WHERE facility_id IN (8, 12)
GROUP BY property_id
HAVING count(facility_id) = 2

ただし、これは、テーブルに重複するエントリがないことを前提としていproperty_facilitiesます。その場合は、サブクエリで DISTINCT を使用するか、最初から重複を許可しないように制約を追加するだけで、これを修正できます。

DISTINCT サブクエリを使用した同じクエリを次に示します。

SELECT property_id
FROM (SELECT DISTINCT property_id, facility_id FROM property_facilities) distinct_rows
WHERE facility_id IN (8, 12)
GROUP BY property_id
HAVING count(facility_id) = 2
于 2012-09-20T20:03:33.827 に答える
0

どうですか

select property_id from properties where property_id in (select property_id from property_facilities)

これにより、8 または 12 だけでなく、施設を持つすべてのプロパティ ID のリストが生成されます。

編集:施設8と12を持つプロパティのリストを取得しようとしている場合は、次のことができます:

select property_id from properties where property_id in 
(select property_id from property_facilities where facility_id = 8) and property_id in
(select property_id from property_facilities where facility_id = 12)
于 2012-09-20T20:05:21.757 に答える