[英]Select from multiple tables in MySQL join should be using JOIN not GROUP BY
[英]Select from multiple tables with group and join
我有 4 個表
飲料、opskrifter、配料和庫存
這些表格包括
飲料
opskrifter
配料
股票
我想查詢 select 飲料,這些飲料可以在庫存成分的 opskrifter 中制作。
我有這個工作,但它只返回drink_id。
select o.drink_id
from opskrifter o
left join stock s on s.ingredient_id = o.ingredient_id
group by o.drink_id
having count(*) = count(s.ingredient_id)
我希望它返回:
drink_id, 名稱, beskriv, glas, 圖片, 酒精
有人在路上幫助我:-) thx
只需將它們添加到SELECT
和GROUP BY
之后的列表中。
SELECT o.drink_id,
o.name,
o.beskriv,
o.glas,
o.image,
o.alcohol
...
GROUP BY o.drink_id,
o.name,
o.beskriv,
o.glas,
o.image,
o.alcohol
...
如果drink_id
是一個鍵,那么在GROUP BY
子句中只列出drink_id
也可能就足夠了。
我認為您的查詢不起作用,您應該計算使用的成分數量和存在的數量,您可以使用 cte 然后加入例如
DROP TABLE IF EXISTS drinks,OPSKRIFTER,ingredients,stock;
create table drinks
(drink_id int,
name varchar(3),
beskriv int,
glas int,
image varchar(10),
alcohol int
);
create table opskrifter
(drink_id int,
ingredient_id int,
quantity int
);
create table ingredients
(ingredient_id int,
name varchar(3)
);
create table stock
(ingredient_id int,
name varchar(3)
);
insert into drinks(drink_id,name) values (1,'n1'),(2,'n2');
insert into opskrifter values (1,1,10),(1,2,10),(2,1,20);
insert into stock values(1,'i1'),(2,'I2');
with cte as
(
select o.drink_id,count(*) cnt,(Select count(*) from stock) sn
from opskrifter o
group by o.drink_id having cnt = sn
)
select drinks.drink_id,drinks.name
from cte
join drinks on drinks.drink_id = cte.drink_id;
+----------+------+
| drink_id | name |
+----------+------+
| 1 | n1 |
+----------+------+
1 row in set (0.00 sec)
基本上你需要帶drink
桌。 我會為此使用join
,同時將聚合查詢轉換為子查詢:
select d.*, o.cnt_ingredients
from drink d
inner join (
select o.drink_id, count(*) as cnt_ingredients
from opskrifter o
left join stock s on s.ingredient_id = o.ingredient_id
group by o.drink_id
having count(*) = count(s.ingredient_id)
) o on o.drink_id = d.drink_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.