MySQL 后from多个表_SELECT * FROM多个表 MySQL

你在这里做的是称为

JOIN(虽然你隐式地做,因为你从多个表中选择)。这意味着,如果您没有在您的WHERE子句中放置任何条件,则您具有这些表的所有组合。只有你的条件,你限制你的加入那些饮料ID匹配的行。

但这仍然是X多行的结果为每个饮料,如果有X照片与这个特殊drinks_id。您的声明不限制您要拥有哪些照片!

如果每个饮料只需要一行,你必须告诉SQL你想做什么,如果有多个行与特定drinks_id。为此,你需要分组和一个aggregate function.你告诉SQL你想要组合在一起的条目(例如所有等于drinks_ids),在SELECT中,你必须告诉每个分组的结果行的不同的条目应该采取。对于数字,这可以是平均值,最小值,最大值(命名一些)。

在你的情况下,如果你只想要一行,我看不到查询照片的饮料的感觉。你可能认为你可以在每个饮料的结果中有一个照片数组,但SQL不能这样做。如果你只想要任何照片,你不关心你会得到,只是按照drinks_id分组(为了每个饮料只有一行):

SELECT name, price, photo

FROM drinks, drinks_photos

WHERE drinks.id = drinks_id

GROUP BY drinks_id

name price photo

fanta 5 ./images/fanta-1.jpg

dew 4 ./images/dew-1.jpg

在MySQL中,我们还有GROUP_CONCAT,如果你想要文件名连接到一个单一的字符串:

SELECT name, price, GROUP_CONCAT(photo, ',')

FROM drinks, drinks_photos

WHERE drinks.id = drinks_id

GROUP BY drinks_id

name price photo

fanta 5 ./images/fanta-1.jpg,./images/fanta-2.jpg,./images/fanta-3.jpg

dew 4 ./images/dew-1.jpg,./images/dew-2.jpg

但是,如果你有字段值,这可能会变得危险,因为很可能你想在客户端再次拆分。它也不是SQL标准聚合函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值