Dapatkan rekod yang tidak wujud dalam jadual bersambung
P粉773659687
P粉773659687 2023-09-10 12:16:29
0
1
394

Saya mempunyai tiga jadual dalam pangkalan data MySQL. Jadual pertama mengandungi pengguna dan jadual kedua mengandungi projek. Di bawah adalah struktur kedua-dua ini.

users ------ userid (int) username (varchar) items ------ itemid (int) name (varchar)

Jadual ketiga ialah jadual gabungan.

user_items ---------- userid (int) itemid (int)

Saya mahukan pertanyaan yang mengembalikan senarai pengguna dan projek yang tidak diberikan kepada mereka.

Dalam contoh Saya mempunyai pengguna berikut

userid username 1 john 2 tim 3 mark

Saya juga ada item berikut

itemid name 1 book 2 pen 3 backpack

Dalam jadual penyertaan saya

userid itemid 1 1 1 3 2 1 2 2 2 3 3 2

Jadi saya ingin mendapatkan senarai item yang tidak dimiliki oleh pengguna, contohnya:

userid itemid 1 2 3 1 3 3

Apakah pertanyaan terbaik untuk mendapatkan hasil seperti ini. Saya mencuba beberapa sambung kiri, sambung luar kiri, sambung kiri, dsb. tanpa berjaya.

Sunting 1: Setakat ini saya telah mencuba pertanyaan berikut:

SELECT con.userid, i.itemid FROM items i LEFT JOIN ( SELECT u.id as userid, ui.itemid FROM users u INNER JOIN user_items ui ON u.userid = ui.itemid ) con ON i.itemid = con.itemid WHERE con.itemid IS NULL

P粉773659687
P粉773659687

membalas semua (1)
P粉818088880

Anda biasanya akan交叉联接pengguna dan produk untuk menjana semua kombinasi yang mungkin, kemudian tapis keluar perkaitan yang sudah wujud dalam jadual jambatan:

select u.userid, p.itemid from users u cross join items i where not exists ( select 1 from user_items ui where ui.userid = u.userid and ui.itemid = i.itemid )

Untuk meningkatkan prestasi, anda memerlukanuser_items(userid, itemid)上的索引(如果您对这些列有唯一kekangan, yang sepatutnya sudah wujud). p>

Kita juga boleh menggunakan songsang左连接untuk menyatakan logik:

select u.userid, p.itemid from users u cross join items i left join user_items ui on ui.userid = u.userid and ui.itemid = i.itemid where ui.userid is null
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!