2013-06-14 1 views
1

이 복잡한 쿼리는 실행시 Operand should contain 1 column(s) 오류를 발생시킵니다. 이 오류는 일부 불필요한 대괄호가 있음을 의미하지만 어떤 것이 있는지 모릅니다. 피연산자는 쿼리에 1 개의 열을 포함해야합니다.

쿼리입니다 :이

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

의 대신

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 
+0

'과는 IN이 (* 3959가 ... 당신은 하위 쿼리에서 하나 이상의 열을 선택하고 있기 때문에'오류를 일으키는 SELECT business_id 주소 "). –

답변

2

할이

AND business_id IN (SELECT (3959 * acos( 

Jonathan로 말했다 : * 반환 모든 열을 선택하고 하나를 선택해야합니다 열을 선택하십시오. business_id

+1

+1. 이것은 문제로 보았다. 그리고 OP에 대한 설명을 위해, 하위 쿼리는 일반적으로 하나의 열만 반환해야합니다. 'SELECT *'는 모든 열을 반환합니다. –

+0

@JonathanKuhn이 (가) 귀하의 제안을 편집하고 추가했습니다. :) 덕분에 –

0

테이블 구조를 모르면 대답하기가 다소 어렵습니다. 문제는 여러 열 (select *)의 목록에있는 business_id로 필터링하는 것입니다. 하위 쿼리에는 하나의 열 (비즈니스 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 
+0

그 해결책 덕분에 –

+0

@ TarekAbdElMonsif - np, 내가 도울 수있어서 다행! – sgeddes

관련 문제