Di Teradata 16.20.53.29, ketika saya melakukan join dan agregasi kiri sebagai berikut:

select
  b.department,
  sum(a.sales) as sales

from table1 a
  left join table2 b
    on b.product = a.product

where a.date_purchase >= '2018-01-01'
  and a.date_purchase <= '2020-01-01'
  and a.brand = 'ACME'
  and a.quantity > 0

group by 1
order by 1

Saya berharap baris yang hilang yang ada di table1 dan tidak di table2 untuk dimasukkan tetapi tidak.

Keluaran:

enter image description here

Namun, jika saya merestrukturisasi kueri seperti ini:

select
   b.department,
   sum(a.sales) as sales

from table1 a
    left join table2 b
        on b.product = a.product
        and a.date_purchase >= '2018-01-01'
        and a.date_purchase <= '2020-01-01'
        and a.brand = 'ACME'
        and a.quantity > 0

group by 1
order by 1

Kemudian baris yang hilang dimasukkan.

Keluaran:

enter image description here

Ini adalah kebalikan dari harapan saya, saya berharap kueri pertama memasukkan nol dan kueri kedua secara efektif menjadi gabungan dalam dan dengan demikian mengecualikan nol. Mengapa ini terjadi?

0
road_rash 13 Mei 2021, 17:38

1 menjawab

Jawaban Terbaik

Baik pertanyaan maupun hasil benar.

Kasus 1. Bergabung di kolom product. Jika beberapa produk tidak memiliki kunci yang cocok, department akan menjadi null. Jelas, semua produk dapat digabungkan, dan pernyataan where memfilter menurut tanggal_pembelian, merek, dan kuantitas.

Kasus 2. Ketika sesuatu dalam kondisi bergabung tidak terpenuhi, kolom b akan menjadi null. Dalam hal ini ketika date_purchase berada di luar rentang, itu akan menandai department sebagai null.

Saya akan memperbarui ini dengan contoh SQLFiddle, sepertinya sementara tidak aktif.

2
vtuhtan 13 Mei 2021, 15:20