MYSQL 유니언 구별
현재 UNION으로 성공적으로 운영되고 있는 두 가지 선택 사항이 있습니다.
(SELECT a.user_id,
a.updatecontents AS city,
b.country
FROM userprofiletemp AS a
LEFT JOIN userattributes AS b ON a.user_id=b.user_id
WHERE typeofupdate='city')
UNION DISTINCT
(SELECT a.user_id,
c.city,
c.country
FROM userverify AS a
LEFT JOIN userlogin AS b ON a.user_id=b.user_id
LEFT JOIN userattributes AS c ON a.user_id=c.user_id
WHERE b.active=1
AND a.verifycity=0);
결과는 다음과 같습니다.
100 Melbourne Australia
200 NewYork America
300 Tokyo Japan
100 Sydney Australia
문제는 쿼리가 중복 user_id(이 경우 100)를 가져온다는 것입니다.첫 번째 쿼리의 세부 사항은 저에게 선례가 되고 두 번째 쿼리에서 user_id가 반복되면 필요 없습니다.
UNION을 칼럼에서 구별할 수 있는 방법이 있습니까?이 경우 user_id?중복되는 user_id를 받지 않고 위의 통화를 할 수 있는 방법이 있을까요? - 두 번째를 드랍합니다.쿼리를 다르게 다시 작성하고 UNION을 사용하지 않아야 합니까? 정말 하나의 쿼리로 원합니다. 필요한 경우 SELECT와 PHP를 사용하여 중복을 제거할 수 있습니다.
아담
아니요. 구별해야 할 정확한 필드를 지정할 수 없습니다.전체 행에서만 작동합니다.
문제의 경우 - 쿼리를 하위 쿼리로 만들고 외부 쿼리로 만듭니다.GROUP BY
user_id
SELECT * FROM
(SELECT a.user_id,a.updatecontents as city,b.country
FROM userprofiletemp AS a
LEFT JOIN userattributes AS b ON a.user_id=b.user_id
WHERE typeofupdate='city')
UNION DISTINCT
(SELECT a.user_id,c.city,c.country
FROM userverify AS a
LEFT JOIN userlogin AS b ON a.user_id=b.user_id
LEFT JOIN userattributes AS c ON a.user_id=c.user_id
WHERE b.active=1 AND a.verifycity=0) x
GROUP BY user_id
MySQL은 서로 다른 행을 생성하지만 행의 모든 열 값은 서로 달라야 합니다.구별을 단일 또는 몇 개의 열로 제한하고자 하는 경우, 다른 열이 구별되지 않을 때, 다음 열을 감쌀 수 있습니다.UNION
하위 query 및 고유하고자 하는 열별 하위 query.
여기서 전체를 포장합니다.UNION
하위 query에서 가명을 지정한 다음GROUP BY
원하는 고유 열:
SELECT * FROM (
SELECT a.user_id,a.updatecontents as city,b.country
FROM userprofiletemp AS a
LEFT JOIN userattributes AS b ON a.user_id=b.user_id
WHERE typeofupdate='city'
UNION
SELECT a.user_id,c.city,c.country
FROM userverify AS a
LEFT JOIN userlogin AS b ON a.user_id=b.user_id
LEFT JOIN userattributes AS c ON a.user_id=c.user_id
WHERE b.active=1 AND a.verifycity=0
) aa GROUP BY user_id;
구분에 포함하고 싶은 열이 두 개 이상인 경우 다음에 나열합니다.GROUP BY
: 등의GROUP BY user_id, city
.
참고: 이 사건에선UNION
원하는 구별을 제공하지 않으며, 단순히 사용하는 것에 이점이 없습니다.UNION
, 그리고 보아하니 UNION ALL
"보다 훨씬 빠르기 때문에" 를 사용할 수 있습니다.UNION ALL
이 질문의 속도를 높이기 위해서입니다.
(SELECT a.user_id,a.updatecontents as city,b.country
FROM userprofiletemp AS a
LEFT JOIN userattributes AS b ON a.user_id=b.user_id
WHERE typeofupdate='city')
UNION ALL
(SELECT a.user_id,c.city,c.country
FROM userverify AS a
LEFT JOIN userlogin AS b ON a.user_id=b.user_id
LEFT JOIN userattributes AS c ON a.user_id=c.user_id
WHERE b.active=1 AND a.verifycity=0
AND a.user_id NOT IN
( SELECT user_id
FROM userprofiletemp
WHERE typeofupdate='city'
)
);
언급URL : https://stackoverflow.com/questions/6965333/mysql-union-distinct
'sourcetip' 카테고리의 다른 글
C의 함수에서 열거를 반환합니까? (0) | 2023.10.05 |
---|---|
WordPress에서 카테고리 목록과 모든 게시물을 표시하려면 어떻게 해야 합니까? (0) | 2023.10.05 |
JDBC를 사용하여 SQL Server 2008 데이터베이스에 연결하려면 어떻게 해야 합니까? (0) | 2023.10.05 |
UImageView 핀치 줌 스위프트 (0) | 2023.10.05 |
디브를 어떻게 반응형 사각형으로 스타일링 할 수 있을까요? (0) | 2023.10.05 |