나는 MySQL 데이터베이스에 두 개의 테이블을 가지고있다. 테이블 c_orig
및 c_now
이런 cluster
번호에 person_id
을,지도 :OUTER JOIN 이에 상응하는 MySQL
person_id cluster
0 0
1 0
2 1
... ...
내가 지금 많은 사람들이 클러스터를 변경하는 방법을 알고 싶어요 (그들이에서 온 또는 어디가 어디로 갔는지) c_orig
와 c_now
을 비교할 때. 다음 두 가지 쿼리를 통해 유입 및 유출을 선택할 수 있습니다. 이러한 쿼리의
SET @CLUSTER = 0;
SELECT c_orig.cluster, COUNT(c_now.person_id) AS influx
FROM c_now
LEFT JOIN c_orig ON c_orig.person_id = c_now.person_id
WHERE c_now.cluster = @CLUSTER
AND (c_orig.cluster != @CLUSTER OR c_orig.cluster IS NULL)
GROUP BY c_orig.cluster;
SELECT c_now.cluster, COUNT(c_now.person_id) AS outflux
FROM c_now
LEFT JOIN c_orig ON c_orig.person_id = c_now.person_id
WHERE c_orig.cluster = @CLUSTER
AND c_now.cluster != @CLUSTER
GROUP BY c_now.cluster;
결과 : 해당 클러스터가 쿼리에 존재하지 않을 때
cluster influx
NULL 39
1 8
2 5
3 2
4 16
6 9
7 2
8 1
cluster outflux
1 9
2 7
3 46
4 5
6 13
7 2
8 1
9 5
은 지금은 이러한 쿼리를 결합, 및 0의 유입/outflux을 갖고 싶어. 그러나 나는 OUTER JOIN
을 할 수없고 다른 순서를 가진 두 개의 LEFT JOIN
은 너무 성가시다. 나는 그것을 성취하기위한 쉬운 길을 간과하고있는 것 같다. 누구든지 나를 도울 수 있습니까? 원하는 출력 :
cluster influx outflux
NULL 39 0
1 8 9
2 5 7
3 2 46
4 16 5
6 9 13
7 2 2
8 1 1
9 0 5
출력에서'NULL' 값을 얻기 위해 첫 번째 LEFT JOIN을'RIGHT JOIN'으로 변경해야했지만 작동합니다. 감사! :-) – physicalattraction
두 번째 생각 : 내 실제 예제에서만 효과가 있었다고 생각합니다. 왜냐하면 outflux에서만 행이없고 유입되는 행이 없기 때문이며, 현재 쿼리에서는 결과 행에 해당 행이 있습니까? – physicalattraction
@physicalattraction. . . 예. 'c' 하위 쿼리에 있기 때문에 두 테이블의 모든 클러스터가 출력됩니다. –