gpt4 book ai didi

mysql - SELECT * FROM 多个表。 MySQL

转载 作者:IT老高 更新时间:2023-10-28 12:53:47 26 4
gpt4 key购买 nike

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

产生 5 行(5 个数组),photo 是一行中唯一的唯一字段。 name, price 重复(here, fanta- name, price 重复 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 张带有此特定饮料 ID 的照片,则每种饮料的结果中仍有 X 多行。您的声明并未限制您想要拥有哪些张照片!

如果您只希望每杯饮料有一行,则必须告诉 SQL 如果有多行具有特定的 Drinks_id,您要做什么。为此,您需要分组和 aggregate function .您告诉 SQL 您要将哪些条目组合在一起(例如所有相等的饮料 ID),并且在 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/12890071/

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