私は4つの(関連する)テーブルを持っています
CAKETABLE
CAKE ICING
RESERVEDSPRINKLES
CAKE SPRINKLE
SPRINKLETABLE
SPRINKLE CONSUMED
ICINGTABLE
ICING CONSUMED
各ケーキにはちょうど 3 つのスプリンクルと 1 つのアイシングがあります。
データベースにクエリを実行し、アイシングもスプリンクルも消費 = '1' ではない、1 つのアイシングと 3 つのスプリンクルを持つすべてのケーキを取得したいと考えています。
それでは、疑似挿入データを見てみましょう: INSERT INTO ICINGTABLE (vanilla, 0), (chocolate, 0);
INSERT INTO SPRINKLETABLE (red, 0), (blue, 0), (green, 0), (orange, 0), (purple, 0),(pink, 0);
INSERT INTO CAKETABLE (cake1, vanilla), (cake2, chocolate);
INSERT INTO RESERVEDSPRINKLES (cake1, red), (cake1, blue), (cake1, green), (cake2, orange), (cake2, purple), (cake2, pink);
これで、バニラのアイシングと赤、青、緑のスプリンクルを添えたケーキ 1 と、チョコレートのアイシングとオレンジ、紫、ピンクのスプリンクルを添えたケーキ 2 ができました。
クエリを実行すると、戻りたい
CAKES
cake1
cake2
ケーキに消費された部分がない場合にのみ、したがって、1 つのスプリンクルが消費済みとしてマークされていても、クエリからそのケーキ全体を省略したいと考えています。次のクエリは、アイシングに対してまさにそれを行います。
SELECT CAKE
FROM CAKETABLE as c
INNER JOIN (SELECT * FROM ICINGTABLE WHERE CONSUMED = '0') as i
ON c.ICING = i.ICING;
しかし、ふりかけについては、私は問題を抱えています。上記と同じ手法を使用すると、クエリは次のように返されます。
CAKE
cake1
cake1
cake1
cake2
cake2
cake2
DISTINCT でそれを排除できますが、スプリンクルが消費された = '0' の場合、逆の機能が必要なときにそのケーキがリストに表示されるため、まだ正しくありません (ケーキは、すべてのスプリンクルが消費された場合にのみ表示されます = '0' )
誰かがこれに適したタイトル名を持っている場合は、それをいただければ幸いです。説明的で短いものは考えられません。