Rumah > Soal Jawab > teks badan
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粉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