UNION 연산자를 활용하는 쿼리를 실행할 때는 관련된 모든 개별 SELECT 문이 다음을 준수하는지 확인해야 합니다. 두 가지 기본 기준:
제공된 쿼리 고려:
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 오류 메시지는 UNION으로 조인된 두 SELECT 문 사이의 열 개수가 일치하지 않음을 나타냅니다. 특히 첫 번째 SELECT 문은 관련된 테이블의 모든 열을 반환하고 두 번째 문은 fid2 열만 가져옵니다.
해결 방법
이 문제를 해결하려면 두 번째 SELECT 문을 다음과 같이 수정해야 합니다. 첫 번째 문의 열 수와 일치합니다. 가장 쉬운 접근 방식은 원하는 모든 열을 명시적으로 포함하는 것입니다.
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 또는 다양한 열 개수를 가진 SELECT 문을 허용하는 UNION ALL 연산자를 사용할 수도 있습니다. 그러나 일치하지 않는 열은 NULL 값으로 채워지므로 모든 경우에 바람직하지 않을 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3