Php MySQL-使用opencart时,操作数应包含1列
在我创建的系统上工作时,我尝试在项目中使用以下查询:Php MySQL-使用opencart时,操作数应包含1列,php,mysql,select,warnings,Php,Mysql,Select,Warnings,在我创建的系统上工作时,我尝试在项目中使用以下查询: SELECT o.order_id, (SELECT op.price, op.quantity, op.name FROM oc_order_product op RIGHT JOIN oc_order o ON op.order_id=o.order_id ) AS product, CONCAT(o.firstname, ' ', o.lastname) AS customer, (SELECT os.name FROM oc_
SELECT o.order_id,
(SELECT op.price, op.quantity, op.name FROM oc_order_product op
RIGHT JOIN oc_order o ON op.order_id=o.order_id ) AS product,
CONCAT(o.firstname, ' ', o.lastname) AS customer,
(SELECT os.name FROM oc_order_status os
WHERE os.order_status_id = o.order_status_id AND os.language_id = '1') AS status,
o.total, o.currency_code, o.currency_value, o.date_added, o.date_modified
FROM `oc_order` o WHERE o.order_status_id > '0' ORDER BY o.order_id DESC LIMIT 0,20
但it警告:操作数应包含1列,请帮助我选择列表中的子查询必须只返回一个表达式。返回多个表达式的子查询无效 问题是第二行,它是外部查询的SELECT列表中的一个子查询。并且在子查询的选择列表中有多个表达式 您还需要确保选择列表中的任何子查询最多返回一行
我建议你考虑一个连接操作,而不是一个相关的子查询,类似这样的事情:
SELECT o.order_id
, op.price AS product_price
, op.quantity AS product_quantity
, op.name AS product_name
, CONCAT(o.firstname, ' ', o.lastname) AS customer
, ( SELECT os.name
FROM oc_order_status os
WHERE os.order_status_id = o.order_status_id
AND os.language_id = '1'
LIMIT 1
) AS status
, o.total
, o.currency_code
, o.currency_value
, o.date_added
, o.date_modified
FROM oc_order o
LEFT
JOIN oc_order_product op
ON op.order_id=o.order_id
WHERE o.order_status_id > '0'
ORDER BY o.order_id DESC
LIMIT 0,20
我让子查询在查询中返回状态
,以演示在SQL语法方面有效的子查询。我添加了LIMIT 1子句,以确保当子查询恰好返回多行时,查询不会在执行时抛出错误
(不清楚您试图通过在选择列表中使用子查询来解决什么问题。)在这样的选择中使用子查询时添加注释。。在考虑性能时,这通常是一种非常糟糕的做法。。。它有一个WHERE条件,这意味着对于您在外部选择中选择的每一行,您都在使用所有相关查询(子选择)数据进行检查。比如说。。。假设你有100份订单。每个都有两个状态。给你100个订单和200个状态。。这意味着您必须进行100*200或两万次检查才能提取出一个相关查询。如果它是一个大表,不要使用它,而是加入表。