두 테이블의 두 열 값을 비교할 수 없으며 첫 번째 테이블에있는 경우 최상의 행을 반환합니다.

절대로 필요한 것

두 테이블을 비교하고 각 제품 유형에 대해 하나 또는 0 개의 행을 반환하는 쿼리를 작성 중입니다. 두 테이블의 값을 비교 한 후 두 번째 행에 첫 번째 테이블보다 더 나은 행이 하나 이상 있으면 0을 반환하고 첫 번째 테이블에 가장 좋은 행이 있으면 한 행을 반환합니다.

예를 들어 다음 행이있는 두 개의 테이블 T1과 T2가 있습니다.

표 T1

Product Price Tax
Pen     10    2.25
Pen      5    1.25
Pen     15    1.5
Board   25    5.26
Board    2    NULL
Water    5    10

표 T2

 Product Price  Tax   
 Pen      8     2.5
 Pen      12    4.2
 Board    NULL  4.26
  Book     10    5

위의 두 테이블에서 SQL 쿼리를 실행하면 결과는 다음과 같아야합니다.

Product Price Tax
Pen     15    NULL
Board   25    5.26
Water    5    10

위의 결과는 다음과 같이 설명 할 수있다 PricePen에서 T1IS 15두 테이블의 최고하지만 tax대한은 pen에서 가장 높은 T2따라서 우리는 반환 NULL을 위해 tax15위해 Price마찬가지로 보드가 모두 한 pricetax에서 T1너무 높은되는입니다 255.26반환과 Water에 항목이 없습니다 T2너무 높은 값을 T1에 대한 항목이 없으므로 Book반환 된 값 T1이 없습니다.Book

아래 쿼리를 사용하고 있지만 예상 결과가 나오지 않습니다.

select t1.product,
       (case when t1.price >= t2.price then t1.price
             when t2.price > t1.price then NULL 
             else coalesce(t1.price, t2.price)
        end) as price,
       (case when t1.tax >= t2.tax then t1.tax
             when t2.tax > t1.tax then NULL 
             else coalesce(t1.tax, t2.tax)
        end) as tax
from table1 t1 left join
     table2 t2
     on t1.product = t2.product;
Tab Alleman

그룹화 및 집계를 수행해야합니다. 안전을 위해 파생 테이블을 사용합니다.

select t1.product,
       (case when t1.price >= COALESCE(t2.price,0) then t1.price
             else NULL
        end) as price,
       (case when t1.tax >= COALESCE(t2.tax,0) then t1.tax
             else NULL
        end) as tax
from (SELECT product, MAX(price) as price, MAX(tax) as tax FROM table1 GROUP BY product) t1 left join
     (SELECT product, MAX(price) as price, MAX(tax) as tax FROM table2 GROUP BY product) t2
     on t1.product = t2.product;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관