【问题标题】:Select subquery error Subquery returns more than 1 row选择子查询错误子查询返回超过 1 行
【发布时间】:2021-10-04 12:04:38
【问题描述】:

表 1

+------------+--------------------+                             
| Serialnum  | Products           |                             
+------------+--------------------+                             
|     1      | Earbuds            |                             
|     2      | Phone              |                             
|     3      | Charger            |                             
|     4      | Data Cable         |                             
|     5      | Speakers           |                             
+------------+--------------------+

表 2

+------------+--------------------+
| product_id | Brands             |
+------------+--------------------+
|     1      | Samsung            |
|     1      | Xaomi              |
|     1      | JBL                |
|     2      | Ronin              |
|     2      | Apple              |
+------------+--------------------+                               

SELECT products.Serialnum,
        products.Product_Name,
        (SELECT GROUP_CONCAT(brand_name) 
         FROM products_brands 
         GROUP BY product_id) 
FROM `products`
    INNER JOIN products_brands ON products.Serialnum=products_brands.product_id

#1242 - 子查询返回多于 1 行

我正在尝试从另一个表中获取与我在外键中给出的该表中的匹配 id 的连接值 像这样:

+------------+------------------------------+
| Products   | Brands                       |
+------------+------------------------------+
|Earbuds     |Samsung,Xaomi,JBL,Ronin,Apple |
|Phone       | Xaomi,Samsung,Apple          |
|Data Cable  | Ronin,Apple,Samsung          |
|Speakers    | JBL                          |
|Charger     | Ronin,Apple,Samsung          |
+------------+------------------------------+                               

编辑: 我改了代码:

SELECT products.Serialnum,products.Product_Name FROM `products`
INNER JOIN (SELECT GROUP_CONCAT(brand_name) 
FROM products_brands 
GROUP BY product_id) products_brands
ON products.Serialnum=products_brands.product_id

新错误:#1054 - 'on clause' 中的未知列 'products_brands.product_id'

【问题讨论】:

  • 根据您的数据示例,您的预期输出我认为可能是错误的,因为所有product_id 都是1
  • 这是一个示例,我有多个具有不同 product_id 的条目
  • ` Product_Name : Earbuds, Brands : Samsung,Xaomi,Ronin,Apple,JBL,Samsung,Xaomi,Ronin,...

标签: php mysql subquery


【解决方案1】:

我认为根据您的数据得出的预期结果是错误的。

CREATE TABLE products(
             Serialnum int(9),
             Products VARCHAR(50)
                                 );

insert into products values (1,'Earbuds'),
                            (2,'Phone'),
                            (3,'Charger'),
                            (4,'Data Cable'),
                            (5,'Speakers');


CREATE TABLE products_brands(
             product_id int(9),
             Brands VARCHAR(50)
                              );                            
                                      
 insert into products_brands values (1,'Samsung'),
                                    (1,'Xaomi'),
                                    (1,'JBL'),
                                    (1,'Ronin'),
                                    (1,'Apple'); 

正确的查询应该是:

SELECT products.Products,
        GROUP_CONCAT(Brands) as Brands
FROM  products 
INNER JOIN products_brands ON products.Serialnum=products_brands.product_id
GROUP BY Products;
     

演示:https://www.db-fiddle.com/f/pB6b5xrgPKCivFWcpQHsyE/6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多