0
votes

Pourquoi ma requête SQL SELEL SELEL est-elle une seule ligne?

Voici mon énoncé SQL:

SELECT *
FROM articles article
JOIN article_translations translation 
     ON article.id = translation.article_id
     AND translation.lang = :lang
     AND translation.date = (SELECT MAX(date)
                             FROM article_translations at_temp
                             WHERE at_temp.lang = :lang
                               AND article.id = translation.article_id)

sql

2 commentaires

SELECT * renvoie toujours toutes les colonnes. Voulez-vous dire les lignes de retour?


Oui désolé, c'était une erreur


3 Réponses :


0
votes

Ceci est dû au fait qu'une seule ligne dans articles correspond à la condition dans la clause sur de la joindre sur article_translations .

Si vous souhaitez sélectionner toutes les lignes de articles , vous pouvez utiliser rejoindre , qui maintient toutes les lignes sur le côté gauche de la requête (tableau avant le Joindre de gauche Clause - Dans votre cas Articles ). Ces lignes, qui ne correspondent à aucune ligne de lignes de article_translations auront null dans tous les article_translations colonnes.


3 commentaires

Je pense que toute ma requête est mauvaise, ce que je veux, c'est de choisir la dernière traduction de chaque article comment puis-je faire cela? Votre solution fonctionne mais c'est étrange parce que chaque article a une traduction


où at_temp.lang =: Lang et article.Id = traduction.article_id est très suspect. Vraisemblablement que le dernier prédicat était censé référence at_temp


WP, c'était le problème (les forêts posteront la même réponse, alors je vais accepter sa réponse), merci



1
votes

Je pense que la dernière condition: xxx

est incorrecte.
Essayez ceci: xxx


0 commentaires

1
votes

Essayez ceci: je suppose que le problème est avec votre sous-requête corrélée => xxx


0 commentaires