Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menggabungkan jadual kepada dirinya sendiri dengan kekunci dalam lajur berbeza yang boleh menjadi NULL

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粉448346289P粉448346289429 hari yang lalu609

membalas semua(1)saya akan balas

  • P粉278379495

    P粉2783794952023-09-10 09:53:30

    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

    balas
    0
  • Batalbalas