2012-03-13 83 views
1

在下面的查询我试图让每#1241 - 操作数应包含1列(S)

类别
SELECT l.* 
FROM (
    SELECT id AS category_id, 
      COALESCE(
      (
      SELECT * 
      FROM images li 
      WHERE li.category_id = dlo.id 

      ORDER BY 
         li.save_status DESC, li.category_id DESC, li.id DESC 
      LIMIT 1 
      ), 0) AS mid 
    FROM cats_imgs dlo where id='1' 
    ) lo 
JOIN images l 
ON  l.save_status = '3' 
    AND l.category_id >= lo.category_id 
    AND l.category_id <= lo.category_id 
    AND l.id >= lo.mid 

一个形象,但不断收到以下错误:

#1241 - Operand should contain 1 column(s) 

任何想法?

+2

取代'*'具有用于'图像li' – newtover 2012-03-13 11:24:43

+0

哇单个列,工作:)发布它作为答案PLZ – 2012-03-13 11:25:31

回答

5

与单个列替换为*images li

0

我也有类似的问题。您的第三级选择语句(SELECT * FROM images li)需要返回单个值,因为第二级选择语句(SELECT id AS category_id,COALESCE(...)仅占用其占位符中的一个值。

对我而言,它工作。在这里,我还平均从第二基于表(SecondBasis)中的值的数据在一分钟基础表(MinuteBasis):

SELECT MinuteBasis.time, MinuteBasis.avg_t, MinuteBasis.avg_p,MinuteBasis.avg_t2, 
    (SELECT avg(SecondBasis.m1) 
    FROM SecondBasis 
    WHERE SecondBasis.time BETWEEN MinuteBasis.time AND addtime (MinuteBasis.time,'0 0:00:59')) 
    (SELECT avg(SecondBasis.m2) 
    FROM SecondBasis 
    WHERE SecondBasis.time BETWEEN MinuteBasis.time AND addtime (MinutBasis.time,'0 0:00:59')) 
FROM MinuteBasis 
WHERE MinuteBasis.time BETWEEN '2012-05-02 8:30:00' AND '2012-05-02 8:44:59' ; 
相关问题