Mysql子查询仅返回一个结果,即使列表中有多个ID

古斯

我有2个表(组和属性),其中组具有多个按ID列出的属性(即:1,2,3,..),当列出它们时,我想显示属于每个组的属性。

问题恰好在子查询中,它仅返回第一项。如果我手动输入值(即:1、5、9 ...),它将正确返回,但是在使用父查询字段(groups.attributes)时会发生错误。

抱歉,我最初发布此问题时未遵循社区标准,因此我不习惯在这里提问。

组表

ID    NAME          ATTRIBUTES
1     Shoes         1,2,3
2     Pants         4,5
...

属性表

ID    IDENTIFIER
1     Size
2     Color
3     Voltage
...

查询

SELECT 
  G.id, G.name, 
  COALESCE(
    (SELECT GROUP_CONCAT(A.name SEPARATOR ', ') FROM attributes A WHERE A.id IN (G.attributes)), 
    '-'
  ) AS attributes_names  
FROM 
  groups G  

肯定会有一个更好的建议或解决方案,使我眼前看不到。

nbk

您必须使用,FIND_IN_SET因为ATTRIBUTES是字符串。

IN 子句需要单个参数,因此仅(IN(1,2,3)或IN('1','2','3')

还请仔细看一看,是否在数据库列中存储分隔列表真的那么糟糕吗?然后考虑标准化表格,这将使查询更加容易。

最后一个GROUPS是MySQL中的保留字,您应避免使用这些

CREATE TABLE `GROUPS`
    (`ID` int, `NAME` varchar(5), `ATTRIBUTES` varchar(5))
;
    
INSERT INTO `GROUPS`
    (`ID`, `NAME`, `ATTRIBUTES`)
VALUES
    (1, 'Shoes', '1,2,3'),
    (2, 'Pants', '4,5')
;
CREATE TABLE ATTRIBUTES
    (`ID` int, `IDENTIFIER` varchar(7))
;
    
INSERT INTO ATTRIBUTES
    (`ID`, `IDENTIFIER`)
VALUES
    (1, 'Size'),
    (2, 'Color'),
    (3, 'Voltage'),
    (4, 'length'),
    (5, 'wifdth')
;
SELECT 
  G.id, G.name, 
  COALESCE(
    (SELECT GROUP_CONCAT(A.IDENTIFIER SEPARATOR ', ') FROM ATTRIBUTES A WHERE FIND_IN_SET (A.ID,G.attributes)), 
    '-'
  ) AS attributes_names  
FROM 
  `GROUPS` G  
id | 名称| attribute_names-     
:| :---- | :------------------- 
 1 | 鞋子| 尺寸,颜色,电压
 2 | 裤子| 长度,宽度      
SELECT GROUP_CONCAT(A.IDENTIFIER SEPARATOR ', ') FROM ATTRIBUTES A WHERE  FIND_IN_SET (A.ID,'1,2,3')
| GROUP_CONCAT(A.IDENTIFIER SEPARATOR',')| 
| :---------------------------------------- | 
| 尺寸,颜色,电压|

db <>在这里拨弄

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

一个结果中有多个SQL查询

mysqli_fetch_assoc仅返回一个结果,即使还有更多结果

我在一个变量结果中有多个字典。如何从中仅返回第一个字典值?

VLOOKUP返回0,即使第一个结果下方的行中有一个值

一个查询中有问题的子查询

UISearchController仅返回第一个结果,但Core Data有多个结果

一个查询中有多个SUM,其中多个

作为一个结果返回多个“ WITH CTE”查询的结果

如何仅获取第一个结果mysql php-foreach中的多个查询

MySQL检查行是否在一个查询中有子记录

Mongo查找查询仅返回一个结果

SQLAlchemy:一个查询中有多个计数

Apollo GraphQL:一个组件中有多个查询?

Gorm仅返回一个而不是多个结果

MySQL:使用上一个查询的结果创建具有多个SELECTS的查询

SQL:查询多个表,仅查询来自一个表的最新结果,并查询来自另一个表的所有结果

多个项目在一个MySQL查询返回不正确的结果计数

gatsby-source-mysql仅返回一个结果

SQL查询-每个ID返回一个结果

是否有一个带有多个where子句的select查询在一个结果表中返回多个结果行?

为什么当我有多个结果时,此powershell代码仅返回一个结果?

正则表达式:即使有多个相同的匹配项,如何也仅返回一个匹配项?

MySQL查询在一个结果中包含多个值

一个函数的一个查询中有多个SELECT语句| PHP-SQL

如何从两个查询中仅返回一个查询结果

MySQL:查询另一个查询结果并返回两个结果?

MySQL - 查询条件,只有在另一个查询条件没有返回结果时才触发

如何构造一个MySql查询,该查询返回具有数组中所有值的结果?

尽管MySQL数据库中有信息,mysqli查询仍返回0个结果