programing

UNION을 사용하여 여러 테이블에서 조건에 따라 테이블을 선택하시겠습니까?

padding 2023. 6. 17. 08:45
반응형

UNION을 사용하여 여러 테이블에서 조건에 따라 테이블을 선택하시겠습니까?

다음 네 개의 테이블이 있습니다.

제품

이드 제품 구성 단위 콴티테 날짜_S
1 토라다55 904 32 08/06/2022
2 테스카 560 EHRS 44 08/06/2022
3 쉘라 905 56 08/06/2022
4 테스카 701 12 08/06/2022
5 테스카 BNA 45 08/06/2022

에어로

이드 구성 단위 지역 나누기
12 560 EHRS FMC DNB
14 428 EHAC FMO DTM

공동체

이드 구성 단위 지역 나누기
12 BNA FMC DKM
14 BMEK FMO DE

플로트

이드 구성 단위 지역 나누기 유형_장비 장비 Prod_Util 페리오드_비단게 Q_vid_equi
14 904 FMC DNBLS MOTUR&DG 모테어 디젤 껍데기 15 12
23 905 FME DNBLS MOTUR&DG 모테어 디젤 껍데기 15 12
22 906 FMO DNBLS MOTUR&DG 모테어 디젤 껍데기 15 12
21 911 FME DNBLS MOTUR&DG 모테어 디젤 껍데기 15 12
55 701 FME DNBLS MOTUR&DG 모테어 디젤 껍데기 15 12

예상 출력

이드 제품 구성 단위 콴티테 날짜_S
1 토라다55 904 32 08/06/2022
2 테스카 560 EHRS 44 08/06/2022
5 테스카 BNA 45 08/06/2022

이 쿼리를 사용해 보았습니다.

SELECT * 
FROM Produit,
     Aéro 
WHERE Aéro.Unit = Produit.Unit 
  AND Aéro.region = 'FMC' 

UNION 

SELECT * 
FROM Produit,
     Commun 
WHERE Commun.Unit = Produit.Unit 
  AND Commun.region = 'FMC' 

UNION 

SELECT * 
FROM Produit,
     Flot 
WHERE Flot.Unit = Produit.Unit 
  AND Flot.region = 'FMC'

"커뮤니케이션" 및 "에로" 테이블만 기반으로 "프로듀이트"를 선택하는 동안에는 잘 작동합니다."플롯" 테이블을 기준으로 "프로듀잇"만 선택하면 작업도 됩니다.그러나 다른 세 개의 테이블을 기준으로 "Productit"을 선택하면 오류가 반환됩니다.

장치가 "FMC" 영역과 연결된 모든 제품을 추출하려면 다음을 적용할 수 있습니다.UNION ALL세 가지 필터링 테이블("Aéro", "Commun" 및 "Flot")의 장치에서 해당 "Productuit"에서 해당 장치를 허용하는 모든 제품을 선택합니다.단위".

SELECT * 
FROM Produit 
WHERE Unit IN (SELECT Unit FROM Aéro   WHERE region = 'FMC'
               UNION ALL 
               SELECT Unit FROM Commun WHERE region = 'FMC'
               UNION ALL
               SELECT Unit FROM Flot   WHERE region = 'FMC')

여기서 데모를 확인하십시오.

참고:UNION ALL보다 효율적입니다.UNION무거운 집계를 피할 수 있기 때문입니다.여기서 차이를 확인하십시오.

언급URL : https://stackoverflow.com/questions/72848476/select-table-based-on-condition-from-multi-tables-using-union

반응형