Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 操作数应包含1列错误_Mysql_Sql_Operand_Mysql Error 1241 - Fatal编程技术网

Mysql 操作数应包含1列错误

Mysql 操作数应包含1列错误,mysql,sql,operand,mysql-error-1241,Mysql,Sql,Operand,Mysql Error 1241,我有一个sql查询返回了一些不正确的结果,因为链接产品的产品id是重复的,所以我在查询的末尾添加了以下内容,希望它只获取任何产品id的第一个实例: AND pc.products_id IN (SELECT pc.products_id, MIN(categories_id) FROM zen_products_to_categories pc GROUP BY pc.products_id) 但是当我运行进程时,我得到一个操作数应该包含1列错误。我自己运行了这个查询,它只给了我每个产品id

我有一个sql查询返回了一些不正确的结果,因为链接产品的产品id是重复的,所以我在查询的末尾添加了以下内容,希望它只获取任何产品id的第一个实例:

AND pc.products_id 
IN
(SELECT
pc.products_id, MIN(categories_id)
FROM
zen_products_to_categories pc
GROUP BY
pc.products_id)
但是当我运行进程时,我得到一个操作数应该包含1列错误。我自己运行了这个查询,它只给了我每个产品id一次,所以我不知道为什么会出错

我现在的全部问题是:

SELECT p.products_quantity, p.abebooks_status, 
p.products_id AS id, 
p.products_status AS prodStatus, 
FORMAT( IFNULL(s.specials_new_products_price, p.products_price),2) AS price, 
pc.categories_id AS prodCatID, 
c.parent_id AS catParentID, 
cd.categories_name AS catName 
FROM 
zen_products p 
JOIN zen_products_description pd ON p.products_id=pd.products_id 
JOIN zen_products_to_categories pc ON p.products_id=pc.products_id 
JOIN zen_categories c ON pc.categories_id=c.categories_id 
JOIN zen_categories_description cd ON c.categories_id=cd.categories_id 
left join zen_specials s on ( s.products_id = p.products_id AND ( (s.expires_date > CURRENT_DATE) OR (s.expires_date = 0) ) ) 
WHERE p.products_price > 0 and p.products_status = 1 
AND pc.products_id 
IN 
(SELECT pc.products_id, MIN(categories_id) 
FROM zen_products_to_categories pc GROUP BY pc.products_id) 
ORDER BY catName ASC 
有人能告诉我为什么在我添加额外查询时它不起作用,因为它让我感到困惑

您可以尝试:

AND (pc.products_id, pc.categories_id) 
    IN
    (SELECT
       pc.products_id, MIN(categories_id)
     FROM
       zen_products_to_categories pc
     GROUP BY
       pc.products_id)
编辑:

在MySQL中,这样的子查询通常比较慢。您应该有更好的运气加入:

SELECT ....
FROM
  ....
  INNER JOIN (SELECT
                products_id, MIN(categories_id) min_categories_id
              FROM
                zen_products_to_categories
              GROUP BY
                products_id) min_ct
  ON pc.products_id=min_ct.products_id
     AND pc.categories_id=min_ct.min_categories_id
WHERE
  ....

当与单列匹配时,子查询应返回一列从子查询中删除
MIN(categories\u id)

AND pc.products_id 
IN
(SELECT
pc.products_id
FROM
zen_products_to_categories pc
GROUP BY
pc.products_id)

这是因为查询不会抛出错误。但是,处理之前大约需要3秒的事情需要30秒以上的时间。有没有办法加快整个查询的速度。这个数据库有大约12000个活跃的产品,但我没想到它会这么做long@StevePrice请看我的最新答案你是认真的!!!这个问题是在2013年11月提出的,你在2014年10月提出,并将其标记为副本。很高兴我有更好的事情要做。荒唐的