Bagaimana untuk menggabungkan jadual kepada dirinya sendiri dengan kekunci dalam lajur berbeza yang boleh menjadi NULL
P粉448346289
P粉448346289 2023-09-09 11:27:14
0
1
614

Saya mempunyai set data (contoh 5 medan) seperti berikut.

Tarikh mula Masa Nombor 1 Nombor 2 Kunci 1 Kunci 2
21 November 2022 0:01 1668969012 413027032418217 B3B820CE
21 November 2022 0:02 B3B820CE
21 November 2022 0:03 1668969013 413027032418218 8EFCB769
21 November 2022 0:04 8EFCB769
21 November 2022 0:05 1668969014 413027032418219 4070A788

Seperti yang anda lihat, dua baris pertama dan dua baris terakhir boleh digandingkan dengan menggunakan rentetan dalam kekunci1 dan kekunci2. Tetapi untuk medan terakhir, tiada medan sepadan.

Pada asasnya saya perlu memadankan pasangan ini dan mencipta jadual baharu seperti yang ditunjukkan di bawah.

Tarikh mula Masa Tarikh tamat Masa Nombor 1 Nombor 2
21 November 2022 0:01 21 November 2022 0:02 1668969012 413027032418217
21 November 2022 0:03 21 November 2022 0:04 1668969013 413027032418218
21 November 2022 0:05 1668969014 413027032418219

Ini yang saya cuba setakat ini. Tetapi ini tidak menyediakan apa yang saya perlukan. Bolehkah seseorang memberitahu saya apakah kesilapan di sini?

SELECT 
    t1.start_date_time, t2.start_date_time AS end_date_time, t1.number1, t1.number2
FROM details_all AS t1
    JOIN details_all AS t2
      ON t1.key1 = t2.key2

P粉448346289
P粉448346289

membalas semua(1)
P粉278379495

Ralatnya mudah - INNER JOIN hanya akan memilih pasangan yang lengkap.

Anda perlu mengumpul semua nilai utama dalam subkueri berasingan dan kemudian sertakan data di dalamnya.

SELECT t1.start_date_time,t2.start_date_time as end_date_time,t1.number1,t1.number2
FROM ( SELECT key1 AS key FROM table
       UNION                           -- combine columns values and remove duplicates
       SELECT key2 AS key FROM table
       ) all_keys
LEFT JOIN table t1 ON all_keys.key = t1.key1
LEFT JOIN table t2 ON all_keys.key = t2.key2

Jika nilai yang sama dalam key1 值始终存在,而 key2 mungkin tidak wujud, maka anda boleh menggunakan LEFT JOIN yang mudah:

SELECT t1.start_date_time,t2.start_date_time as end_date_time,t1.number1,t1.number2
FROM      table t1
LEFT JOIN table t2 ON t1.key1 = t2.key2
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan