如何防止子查询返回多于1行

迪尼达·费尔南多

以下子查询返回多于1行

SELECT date, 
       order_no, 
       (SELECT product_name 
        FROM   product 
        WHERE  product_id IN (SELECT product_id
                              FROM   order_det)),
       qty 
FROM   order_det 
WHERE  order_no IN (SELECT order_no 
                    FROM   order_id 
                    WHERE  cust_id = (SELECT log_id
                                      FROM   orderpanel_log
                                      ORDER  BY orderpanel_log.date DESC
                                      LIMIT  1)) 

我该如何预防?

scaisEdge

您的子查询

(SELECT product_name 
        FROM   product 
        WHERE  product_id IN (SELECT product_id
                              FROM   order_det ))

可能会返回更多行,因此您应该减少重新调整的行数,例如:

(SELECT product_name 
        FROM   product 
        WHERE  product_id =  (SELECT product_id
                              FROM   order_det
                              limit 1 ))

SELECT date, 
       order_no, 
        (SELECT product_name 
        FROM   product 
        WHERE  product_id =  (SELECT product_id
                              FROM   order_det
                              limit 1 ))
       qty 
FROM   order_det 
WHERE  order_no IN (SELECT order_no 
                    FROM   order_id 
                    WHERE  cust_id = (SELECT log_id
                                      FROM   orderpanel_log
                                      ORDER  BY orderpanel_log.date DESC
                                      LIMIT  1)) 

但我建议您尝试使用内部联接重构查询,并减少或避免使用子查询

  SELECT od.date, 
         od.order_no, 
         p.product_name,
         od.qty  
  FROM   order_det od 
  INNER JOIN product p on p.product_id = od.product_id
  INNER JOIN order_id oi  on o1.order_no = od.order_no
  WHERE  cust_id = ( 
      SELECT log_id
      FROM   orderpanel_log
      ORDER  BY orderpanel_log.date DESC
       LIMIT  1
    )

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章