我有三個使用 Oracle 資料庫的表:
Recipe
RID Cocktail Made_by
1 Daiquiri Otto
2 Brooklyn Lamp Bene
3 Mai Tai Otto
4 Brooklyn Lamp Bene
5 Brooklyn Lamp Otto
6 Drivers Glow Alfred
Ingredients
Ing_ID Ing-Name From_Where
1 Obstgeist Deutschland
2 Kuba-Rum Cuba
3 Limettensaft Spain
4 Obstgeist Deutschland
5 Grapefruit Deutschland
6 Zitronensaft Spain
7 Jamaika-Rum Jamaika
8 Martinique Italy
9 Curacao Venezuela
10 Mandelsirup Italy
11 Grapefruit Spain
12 Brombeersirup Deutschland
Mix
RID Ing_ID Quantity
1 2 60
1 3 30
2 4 40
2 5 10
2 6 20
3 7 30
3 8 30
3 9 15
3 10 8
3 3 20
4 4 40
4 5 10
4 3 15
5 4 40
5 5 10
5 3 10
5 6 10
6 11 150
6 12 30
混合表將配方和成分相互連接。我應該找到一種由酒保奧托調制的雞尾酒,它使用了西班牙和古巴的原料。這是我到目前為止所嘗試的:
SELECT DISTINCT r.rid, r.cocktail
FROM recipe r
join mix m
on r.rid = m.rid
JOIN ingredients i
on m.ing_id = i.ing_id
WHERE r.made_by LIKE 'Otto' AND
i.ing_id IN (SELECT ing_id
FROM ingredients
WHERE
from_where LIKE 'Spain')
AND EXISTS (SELECT *
FROM ingredients
WHERE
from_where LIKE 'Cuba');
此查詢的預期輸出:
RID Cocktail
1 Daiquiri
目前,我只是得到了酒保奧托制作的所有雞尾酒,沒有區分成分,比如:
RID Cocktail
1 Daquiri
3 Mai Tai
5 Brooklyn Lamp
由于我是 SQL 新手,我不知道如何構建一個同步查詢,該查詢同時搜索兩個字串或同一欄位中的兩個記錄。那是迄今為止我最好的嘗試。每一個提示都會非常感激!非常感謝您提前
uj5u.com熱心網友回復:
通過此查詢,您將獲得所有含有古巴和西班牙成分的雞尾酒,并且這些雞尾酒的成分也可以來自其他國家,只要一種來自古巴,一種來自西班牙。
SELECT r.rid
, r.cocktail
FROM recipe r
JOIN mix m on r.rid = m.rid
JOIN ingredients i on m.ing_id = i.ing_id
WHERE r.made_by LIKE 'Otto'
AND i.From_Where IN ('Cuba', 'Spain')
HAVING COUNT(DISTINCT i.From_Where) >= 2
GROUP BY r.rid
, r.cocktail
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494094.html
