1

我有这个复杂的查询,Operand should contain 1 column(s)执行时会出错。我知道这个错误意味着有一些不需要的括号,但我不知道是哪些。

这是查询:

SELECT 
 * 
FROM 
 deals 
WHERE 
 country_id = 2 AND 
 (city_id = 4 OR city_id = 0) AND 
 section_id = 2 AND 
 id IN (
  SELECT 
   deal_id 
  FROM 
   deal_repeat 
  WHERE 
   start_date = '2013-06-14') AND 
   business_id IN (
    SELECT 
     *, ( 3959 * acos( cos( radians('51') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-114') ) + sin( radians('51') ) * sin( radians( lat ) ) ) ) AS distance 
    FROM 
     address 
    HAVING 
     distance < '25'
   ) 
  ORDER BY id DESC
4

2 回答 2

2

而不是这个

  AND business_id IN (SELECT *, ( 3959 * acos( 

做这个

 AND business_id IN (SELECT  ( 3959 * acos( 

如前所述Jonathan: SELECT * 返回所有列,您应该选择一列来选择 business_id

于 2013-06-14T18:18:59.470 回答
0

在不知道您的表结构的情况下,这有点难以回答。问题是您正在通过位于多列列表中的 business_id 进行过滤(选择 *)。子查询应该只包含一个列(大概是一个业务 ID 列表)。相反,假设您的地址表中有一个企业 ID 字段,那么这可能就是您要查找的内容。

SELECT * 
FROM deals 
WHERE country_id = 2 
    AND city_id IN (4,0) 
    AND section_id = 2 
    AND id IN (
        SELECT deal_id 
        FROM deal_repeat 
        WHERE start_date = '2013-06-14') 
   AND business_id IN (
        SELECT business_id 
        FROM address 
        WHERE 3959*acos(cos(radians('51')) * 
            cos(radians(lat)) * 
            cos(radians(lng)-radians('-114'))+sin(radians('51')) * 
            sin(radians(lat)))  < '25') 
ORDER BY id DESC
于 2013-06-14T18:27:50.857 回答