>  기사  >  데이터 베이스  >  UNION을 사용할 때 \"Select 문의 서로 다른 열 개수\" 오류를 해결하는 방법은 무엇입니까?

UNION을 사용할 때 \"Select 문의 서로 다른 열 개수\" 오류를 해결하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-30 19:52:30357검색

How to Resolve the

오류: Select 문의 열 개수가 다릅니다

UNION 연산자를 활용하는 쿼리를 실행할 때 관련된 모든 개별 SELECT 문이 다음을 준수하는지 확인하는 것이 중요합니다. 두 가지 기본 기준:

  1. 일치하는 열 수: 각 SELECT 문은 검색된 결과 집합에서 동일한 수의 열을 생성해야 합니다.
  2. 일관된 데이터 유형: 다양한 SELECT 문의 해당 열의 데이터 유형이 정렬되어야 합니다.

문제 분석

제공된 쿼리 고려:

<code class="sql">SELECT * FROM friends
LEFT JOIN users AS u1 ON users.uid = friends.fid1
LEFT JOIN users AS u2 ON users.uid = friends.fid2
WHERE (friends.fid1 = 1) AND (friends.fid2 > 1)
UNION SELECT fid2 FROM friends
WHERE (friends.fid2 = 1) AND (friends.fid1 < 1)
ORDER BY RAND()
LIMIT 6;

오류 메시지는 UNION으로 조인된 두 SELECT 문 사이의 열 개수 불일치를 나타냅니다. 특히 첫 번째 SELECT 문은 관련된 테이블의 모든 열을 반환하고 두 번째 문은 fid2 열만 가져옵니다.

해결 방법

이 문제를 해결하려면 두 번째 SELECT 문을 다음과 같이 수정해야 합니다. 첫 번째 문의 열 수와 일치합니다. 가장 쉬운 방법은 원하는 모든 열을 명시적으로 포함하는 것입니다.

<code class="sql">   SELECT f.*, u.*
     FROM FRIENDS AS f
     JOIN USERS AS u ON u.uid = f.fid2
    WHERE f.fid1 = 1 
      AND f.fid2 > 1
UNION 
   SELECT f.*, u.*
     FROM FRIENDS AS f
     JOIN USERS AS u ON u.uid = f.fid1
    WHERE f.fid2  = 1 
      AND f.fid1 < 1
ORDER BY RAND()
LIMIT 6;</code>

또는 UNION ALL 연산자를 사용하여 다양한 열 개수를 포함하는 SELECT 문을 허용할 수도 있습니다. 그러나 일치하지 않는 열은 NULL 값으로 채워지므로 모든 경우에 바람직하지 않을 수 있습니다.

위 내용은 UNION을 사용할 때 \"Select 문의 서로 다른 열 개수\" 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.