Maison > Article > base de données > Comment récupérer uniquement la première ligne d'un LEFT JOIN pour chaque entrée de table de gauche ?
Obtention de la première ligne d'un LEFT JOIN
En SQL, l'exécution d'un LEFT JOIN entraîne généralement plusieurs lignes pour la table de gauche, une pour chaque ligne correspondante dans le tableau de droite. Cependant, dans certains scénarios, il peut être nécessaire de récupérer uniquement la première ligne de la table de gauche.
Structure de base de données simplifiée
Considérez la structure de base de données simplifiée suivante :
Flux
id | title | content ---------------------- 1 | Feed 1 | ...
Artistes
artist_id | artist_name ----------------------- 1 | Artist 1 2 | Artist 2
feeds_artists
rel_id | artist_id | feed_id ---------------------------- 1 | 1 | 1 2 | 2 | 1 ...
Tentative initiale et ses limites
Pour extraire des articles et inclure uniquement le premier artiste pour chaque flux, un LEFT JOIN est généralement utilisé. La requête suivante représente une première tentative :
SELECT * FROM feeds LEFT JOIN feeds_artists ON wp_feeds.id = ( SELECT feeds_artists.feed_id FROM feeds_artists WHERE feeds_artists.feed_id = feeds.id LIMIT 1 ) WHERE feeds.id = '13815'
Cette requête vise à récupérer uniquement la première ligne de la table feeds_artists pour chaque ID de flux. Cependant, cela ne fonctionne pas efficacement.
Solution
Pour réussir à extraire uniquement le premier artiste de chaque flux, la requête suivante peut être utilisée :
SELECT * FROM feeds f LEFT JOIN artists a ON a.artist_id = ( SELECT artist_id FROM feeds_artists fa WHERE fa.feed_id = f.id LIMIT 1 )
Dans cette requête révisée, la sous-requête garantit que la valeur de l'artiste représente la première ligne de la table feeds_artists pour chaque ID de flux. La clause LIMIT 1 joue un rôle crucial dans la sélection uniquement de la première ligne.
Solution alternative pour incrémenter les identifiants
Si l'on peut supposer que les identifiants d'artiste augmentent avec le temps , une solution alternative est présentée :
SELECT * FROM feeds f LEFT JOIN artists a ON a.artist_id = ( SELECT MIN(fa.artist_id) a_id FROM feeds_artists fa WHERE fa.feed_id = f.feed_id )
Ici, la sous-requête MIN(artist_id) renvoie l'identifiant de l'artiste avec la valeur la plus basse, en supposant que cela correspond au premier artiste.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!