- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
从饮料中选择名称、价格、照片、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/
我是一名优秀的程序员,十分优秀!