programing

MySQL 여러 테이블에서 선택, 일치하지 않는 모든 열 및 행 유지

batch 2023. 7. 15. 09:57
반응형

MySQL 여러 테이블에서 선택, 일치하지 않는 모든 열 및 행 유지

테이블이 2개 있습니다.

tableA:

이드 데이트 A colA ...
1 2022-11-11 12:00:00 A
2 2022-11-12 12:00:00 B
3 2022-11-14 12:00:00 C

tableB:

이드 날짜 B 콜비 ...
3 2022-11-05 12:00:00 D
4 2022-11-06 12:00:00 E
5 2022-11-13 12:00:00 F

모든 행을 하나의 결과에 넣고 열별로 정렬합니다.date

원하는 결과(열별로 정렬된 두 테이블의 행)date DESC):

이드 날짜. colA 콜비 ... ...
3 2022-11-14 12:00:00 C
5 2022-11-13 12:00:00 F
2 2022-11-12 12:00:00 B
1 2022-11-11 12:00:00 A
4 2022-11-06 12:00:00 E
3 2022-11-05 12:00:00 D

테이블을 결합할 수는 있지만 테이블이 "찌그러진" 상태입니다.

SELECT 
    COALESCE(a.id, b.id) AS id, 
    COALESCE(a.dateA, b.dateB) AS date, 
    a.colA, 
    b.colB
FROM tableA AS a, tableB AS b
ORDER BY date DESC

사용하다UNION ALL그리고.ORDER BY이 경우 열을 열거해야 합니다.

select id, dateA as dateX, colA, null as colB from tableA
union all
select id, dateB, null, colB from tableB
order by dateX

union all두 개의 데이터 세트를 결합합니다.두 테이블에 서로 다른 열이 있기 때문에, 우리는 둘 다 배열해야 합니다.select동일한 열 집합을 반환하도록 절;null값을 사용하여 지정된 데이터 집합의 "숫자" 열을 채울 수 있습니다.

결과 집합 정렬에 대해서는 : MySQL에서 단일ORDER BY순식간에UNION ALL쿼리는 전체 결과 집합에 적용됩니다(결합된 후).쿼리는 이를 수행합니다(사용).dateX하위 쿼리에 생성된 열 별칭).

동일하게 공유하는 행을 표시하려는 경우id그리고.date하나의 행으로 GMB의 답변 위에 구축할 수 있습니다.

select id, dateX as date, max(colA) as colA, max(colB) as colB
from (
  select id, dateA as dateX, colA, null as colB from tableA
  union all
  select id, dateB, null, colB from tableB
) as q
group by id, dateX
order by dateX

db-fiddle 참조

언급URL : https://stackoverflow.com/questions/74437964/mysql-select-from-multiple-tables-keep-all-columns-and-row-without-match

반응형