Récupère les enregistrements qui n'existent pas dans la table connectée
P粉773659687
P粉773659687 2023-09-10 12:16:29
0
1
414

J'ai trois tables dans une base de données MySQL. La première table contient des utilisateurs et la seconde table contient des éléments. Vous trouverez ci-dessous la structure de ces deux éléments.

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

La troisième table est la table de jointure.

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

Je veux une requête qui renvoie une liste des utilisateurs et des projets qui ne leur sont pas attribués.

Dans l'exemple J'ai les utilisateurs suivants

userid username 1 john 2 tim 3 mark

J'ai également les articles suivants

itemid name 1 book 2 pen 3 backpack

Dans ma table de jointure

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

Je souhaite donc obtenir une liste des éléments qui n'appartiennent pas à l'utilisateur, par exemple :

userid itemid 1 2 3 1 3 3

Quelle est la meilleure requête pour obtenir des résultats comme celui-ci. J'essaie des jointures gauches, des jointures externes gauches, des jointures gauches, etc. sans succès.

Modification 1 : Jusqu'à présent, j'ai essayé les requêtes suivantes :

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

répondre à tous (1)
P粉818088880

Vous devez généralement交叉联接utilisateurs et produits pour générer toutes les combinaisons possibles, puis filtrer les associations qui existent déjà dans la table de pont :

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 )

Pour améliorer les performances, il fautuser_items(userid, itemid)上的索引(如果您对这些列有唯一des contraintes, qui devraient déjà exister). p>

On peut aussi utiliser l'inverse左连接pour exprimer la logique :

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
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!