私は SQL が苦手で、解決方法がわからない問題に遭遇しました。SQL に関する本 (O'Reilly's Learning SQL) の一部を読んで再読しましたが、必要な情報が含まれていると期待していましたが、見つかりませんでした。
私の問題は次のとおりです。簡単に説明できるように、簡単な例を使用します。
car、rim、および 2 つの組み合わせである carRim という 3 つのテーブルがあります。
car
carId
description
rim
rimId
description
carRim
carRimId
carId
rimId
price
テーブル carRim には、価格の追加属性があります。これは、リムの価格が車の種類ごとに異なる可能性があるためです。私が持っている制約は、すべてのタイプのリムをすべてのタイプの車に一度だけ結合する必要があるということです. したがって、car-rim のすべての組み合わせは一意である必要があります。
車にリムを追加したい場合、その車にまだ結合されていないリムのリストが必要です。このためには、リムの合計リストと、リムを追加したい車に既に結合されている carRim のリストに対して、それぞれリム テーブルと carRim テーブルが必要だと思います。
特定の車に結合されているリムのリストを作成する (単純な) クエリを作成しました。次の例では、carId 9 の車です。
SELECT
*
FROM
rims
INNER JOIN
carRims
ON
carRims.rimId = rim.rimId
WHERE
carRims.carId = 9
しかし今、特定の車にまだ結合されていないリムのリストが必要です。問題は、LEFT OUTER JOIN を実行すると、取得したリストが他の車へのリムの結合で「汚染」されるため、「WHERE carRims.carId IS NULL」のフィルター条件が機能しないことです。
SELECT
*
FROM
rims
LEFT OUTER JOIN
carRims
ON
carRims.rimId = rim.rimId
WHERE
carRims.carId IS NULL
もう 1 つの課題は、クライアントが MySQL 4 を使用しており、現時点ではアップグレードできないため、サブクエリなど、MySQL 5 の新しい構文を使用できないことです。
この問題に対するクエリを MySQL 4 で作成できますか? 私はできると思います。
ありがとう!