2017-04-06 3 views
0

나는 다음과 같은 오류가 계속 mysql을 내 쿼리를 실행할 : 나는 그것을 어떻게 해결합니까mysql 오류가 계속 나타납니다 - # 1241 - 피연산자에 1 개의 열이 있어야합니다 - 의미는 무엇입니까?

Operand should contain 1 column(s)

를?

SELECT(SELECT Tag, COUNT(*) AS magnitude 
FROM (SELECT a.* 
FROM sport b 
join sport a 
on a.Tag = b.Name 
where b.sport_ID > a.sport_ID and a.Tag = 'Football') as ball 
LIMIT 1) 
+0

빈'SELECT '가 있기 때문에 가능성이 큽니다. –

답변

0

최종 선택에 지정된 열이 없습니다. 이것을 시도하십시오 :

SELECT * from (SELECT Tag, COUNT(*) AS magnitude 
FROM (SELECT * 
FROM sport b 
join sport a 
on a.Tag = b.Name 
where b.sport_ID > a.sport_ID and a.Tag = 'Football') as ball 
group by Tag 
LIMIT 1) as ball2 

심지어 b.sport_ID> b.sport_ID가 맞지 않습니다.

+0

여전히 보이는 오류가 발생했습니다 – Beck

+0

쿼리가 업데이트되었습니다. 그룹화 기능이있는 경우 group by 절도 빠져 있습니다. 동일한 오류가 발생 했습니까? –

+0

이제이 메시지가 나타납니다 # 1248 - 파생 된 모든 테이블에는 고유 한 별칭이 있어야합니다 – Beck

1

하위 쿼리에는 태그와 크기의 두 열이 있습니다. 스칼라 하위 쿼리가 아닙니다.

select-list의 모든 하위 쿼리는 스칼라 하위 쿼리이어야하며 정확히 한 열과 한 행을 반환해야합니다.

예 : 간단하게 유지하고 리터럴 값의 쿼리를 사용하므로 테이블을 참조하지 않습니다. 선택 목록의 각 항목에 대해 열 별칭을 지정합니다.

SELECT 
    123 AS colum1, 
    456 AS column2, 
    (SELECT 789, 'abc') AS column3; 

기다려라! 789와 'abc'에 열 별칭 column3을 어떻게 할당 할 수 있습니까? 그게 모호합니다.

불투명하므로 이라는 오류 메시지가 표시됩니다. 왜냐하면이 모호하기 때문입니다. 하위 쿼리는 두 개의 열을 반환했지만이 규칙은 외부 쿼리의 선택 목록에있는 각 항목이 하나의 열이어야한다는 규칙을 위반합니다.

이제 선택 목록의 각 항목은 하나의 열만 반환합니다.

는 유사한 규칙도, 즉 더 이상의 행을 반환하지 않으려면 선택 목록에서 하위 쿼리를 필요로 존재합니다

SELECT 
    123 AS colum1, 
    456 AS column2, 
    (SELECT some_column FROM table_with_multiple_rows) AS column3; 

서브 쿼리가 여러 값을 반환하기 때문에이 잘못하고있는 방법은 물건이 없다 그 모든 값은 외부 쿼리에서 결과의 한 행에 들어갑니다.

해결 방법에는 몇 가지가 있습니다. 하위 쿼리가 하나 이상의 행을 반환하지 않는지 확인하십시오.

SELECT 
    123 AS colum1, 
    456 AS column2, 
    (SELECT some_column FROM table_with_multiple_rows 
    LIMIT 1) AS column3; 

어느 쪽이든, 당신의 하위 쿼리가 반환합니다

SELECT 
    123 AS colum1, 
    456 AS column2, 
    (SELECT some_column FROM table_with_multiple_rows 
    WHERE unique_column = 789) AS column3; 

아니면 사용 LIMIT 1 : 어느 하나의 행 (테이블의 기본 또는 고유 키의 조건)를 지정하기 위해 WHERE 절을 사용 최대 한 행 (0 행과 일치 할 수 있으며,이 경우 하위 쿼리의 결과는 NULL입니다).

+0

저는 꽤 혼란 스럽습니다. – Beck

+0

@Beck : 위의 예제를보십시오. –

+0

지금 sport_ID가 중복 열 이름이라고 들었습니다 – Beck