Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

SQL - Kiri gabungkan 2 kunci asing ke 1 kunci utama

Saya sering melihat orang-orang bergumul dengan gagasan untuk bergabung dengan tabel itu sendiri atau beberapa kali dalam kueri yang sama (seperti di sini). Setelah dikuasai, ini adalah teknik yang bagus untuk digunakan pada tabel yang memiliki banyak hubungan antar baris (seperti daftar tim yang harus bermain satu sama lain!). Seperti yang telah ditunjukkan orang lain, Anda perlu menggunakan dua inner join s untuk mencapai ini:

select
    *
from
    games g
    inner join teams t1 on
        g.teamid1 = t1.teamid
    inner join teams t2 on
        g.teamid2 = t2.teamid

Jadi, jika games your Anda tabel terlihat seperti ini:

GameID    TeamID1    TeamID2
----------------------------
     1          1          3
     2          4          2
     3          2          1

Anda akan mendapatkan kumpulan hasil:

g.GameID    g.TeamID1    g.TeamID2    t1.TeamID    t1.Name    t2.TeamID    t2.Name
----------------------------------------------------------------------------------
       1            1            3            1    Lions              3    Bears
       2            4            2            4    Oh My              2    Tigers
       3            2            1            2    Tigers             1    Lions

Tentu saja, saya akan membuat alias kolom ini di select pernyataan, jika saya adalah saya, demi kegunaan:

select
    g.GameID,
    t1.Name as Team1,
    t2.Name as Team2
from
    ...

Dengan cara ini, kolom dapat diberi nama dengan tepat, daripada memiliki t1 dan t2 kolom memiliki nama yang sama.

Sekarang, untuk mengatasi kebingungan tentang apa itu left join adalah. Anda lihat, left join akan mengambil semua baris dari tabel pertama (atau kiri), dan kemudian mencocokkan setiap baris pada kondisi join ke tabel kedua (atau kanan). Untuk setiap baris dari tabel kiri, Anda akan mendapatkan null di semua kolom di right tabel.

Menggali sebuah contoh, katakanlah seseorang memasukkan null untuk TeamID2 di salah satu baris untuk alasan apa pun. Katakanlah juga bahwa tim TeamID 4 dulu ada, tapi sekarang tidak lagi.

GameID    TeamID1    TeamID2
----------------------------
     1          1          3
     2          4          2
     3          1       null

Sekarang, mari kita lihat apa itu left join akan dalam hal permintaan:

select
    *
from
    games g
    left join teams t1 on
        g.teamid1 = t1.teamid
    left join teams t2 on
        g.teamid2 = t2.teamid

Logikanya, ini akan mengambil semua games kami , lalu mencocokkannya dengan teams masing-masing . Namun, jika TeamID tidak ada, kita akan mendapatkan null s. Ini akan terlihat seperti ini:

g.GameID    g.TeamID1    g.TeamID2    t1.TeamID    t1.Name    t2.TeamID    t2.Name
----------------------------------------------------------------------------------
       1            1            3            1    Lions              3    Bears
       2            4            2         null    null               2    Tigers
       3            1         null            1    Lions           null    null

Oleh karena itu, left join akan hanya diperlukan jika tim bersifat opsional.

Dalam kasus Anda, Anda akan menggunakan inner join untuk bergabung dengan tabel beberapa kali. Ini adalah praktik yang sangat umum dan agak berguna. Ini menghindari beberapa jebakan subquery (terutama di MySQL), sementara memungkinkan Anda untuk mengambil data dari tabel untuk perbandingan intratable. Ini sangat berguna ketika mencoba menemukan urutan sesuatu, atau baris terkait.

Bagaimanapun, saya harap jawaban yang sangat bertele-tele ini membantu seseorang di suatu tempat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memilih kolom yang juga merupakan kata kunci di MySQL

  2. Cara Menghitung Margin Di MySQL

  3. Izinkan pengguna membuat dan mengubah tabel?

  4. TYPO3:Dapatkah saya menarik dari database lain di server yang sama?

  5. Menyisipkan beberapa baris dalam tabel menggunakan PHP