1

私はこの問題に苦労してきました。壁に向かいます。私はこれが簡単でなければならないことを知っています。

参照テーブルで複数の条件に一致するアイテムを選択したい。問題を説明するのに役立つスキーマの例を次に示します。

tblCars
------------
CarID
CarName

tblCarColors
------------
ColorID
Color

tblCarColorXRef
------------
ID
CarID
ColorID

基本的には、検索対象となる複数の色の車を見つけたいと考えています。例を続けます。車のテーブルのトヨタが多色だとしましょう..黒と黄色

トヨタのCarIDは1

黒の ColorID は 1 で、黄色は 2 です。

1 AND 2 に一致する tblCarColorXRef テーブル内のすべての車を検索する必要があります。「and」でなければなりません。黒の車や黄色の車ではなく、黄色と黒の両方を含む車を見つけたいと考えています。

問題は、WHERE ColorID = 1 AND ColorID = 2 を検索できることです。これは決して真ではないため、ここからヘッド バンギングが始まります。このクエリを他のテーブルの他の基準でラップする必要があります.HAVINGとCOUNTに近づきますが、それは必ずしも正確または正しいとは限りません.

補足: 車は、外部参照テーブルを使用して 1 つまたは複数の色を持つことができます。

4

3 に答える 3

2

他にもいくつか提案します。

  1. テーブル名から「tbl」を削除します。
  2. ID 列を削除してみてください。この例では、探している実際のキーは車の種類 (ホンダ、トヨタなど) であるため、ID 列は必要ありません。色についても同様です。これは、ID 列ではなく、主キーとして複合キーを持つ Xref にも役立つ場合があります。これが役立つかどうかを確認してください - CarColorExample、そうでない場合は、詳細を教えてください。修正します。
于 2013-08-14T02:02:18.477 に答える
0

私は SQL に少し慣れていないので、何かを見落としている可能性があります (構文エラーや論理エラーなど)。これは私が試すものです:

CarID同じテーブルに 1 のインスタンスが少なくとも 1 つありColorID、同じテーブルに2 のインスタンスが 1 つある を選択しますColorID

SELECT a.CarID
FROM tblCarColorXRef a
WHERE
(
    SELECT COUNT(1) AS carsWithColor1
    FROM tblCarColorXRef b
    WHERE b.CarID = a.CarID AND b.ColorID = 1
    LIMIT 1
) > 1
AND
(
    SELECT COUNT(1) AS carsWithColor2
    FROM tblCarColorXRef b
    WHERE b.CarID = a.CarID AND b.ColorID = 2
    LIMIT 1
) > 1
于 2013-08-14T01:26:11.347 に答える