gpt4 book ai didi

mysql - SELECT * FROM 多个表。 MySQL

转载 作者:行者123 更新时间:2023-11-29 19:23:58 25 4
gpt4 key购买 nike

从饮料中选择名称、价格、照片,drinks_photos WHERE Drinks.id = Drinks_id

产生 5 行(5 个数组),photo 是一行中唯一唯一的字段。 名称,价格被重复(这里, fanta- 名称,价格 重复3次。)我如何摆脱这些重复项?

编辑:我想要每种饮料的名称、价格以及所有照片

 id      name      price
1. fanta 5
2. dew 4


id photo drinks_id
1. ./images/fanta-1.jpg 1
2. ./images/fanta-2.jpg 1
3. ./images/fanta-3.jpg 1
4. ./images/dew-1.jpg 2
5. ./images/dew-2.jpg 2

最佳答案

您在这里所做的称为 JOIN (尽管您隐式执行此操作,因为您从多个表中进行选择)。这意味着,如果您没有在 WHERE 子句中添加任何条件,则您将拥有这些表的所有组合。仅根据您的条件,您才将连接限制为饮料 ID 匹配的行。

但是,如果有 X 张具有该特定 Drinks_id 的照片,则每种饮料的结果中仍然存在 X 多行。您的声明不会限制您想要拥有哪张照片!

如果您只想要每种饮料一行,则必须告诉 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 聚合函数。

关于mysql - SELECT * FROM 多个表。 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42268156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com