2010-12-14 5 views

Répondre

0

Il confond exactement les informations que vous essayez de récupérer, mais si vous connaissez un ID particulier, vous pouvez utiliser:

SELECT ID,lang,time 
FROM articles,article_versions 
WHERE articles.ID=<article_id_you_provide> AND 
     articles.ID=article_versions.article AND 
     article_versions.time = (SELECT max(time) 
           FROM article_versions 
           WHERE article=<article_id_you_provide>); 

Permettez-moi savoir si ce n'est pas ce que vous cherchez et je peux réviser ma réponse plus loin.

+0

oui, il fait ce que je veux. Mais qu'en est-il de la performance, n'est-ce pas plus lent que rejoindre ou c'est pareil que rejoindre? – kravemir

+0

bien le faire de cette façon est une jointure dans un sens, car il faut prendre le produit croisé des deux tables et le filtre de clauses where. La raison pour laquelle je n'ai pas utilisé la syntaxe de jointure est que votre clé étrangère dans article_versions n'est pas le même nom que les articles, ce serait donc compliqué de faire une jointure naturelle. –

0

En supposant [Articles_versions] [temps] serait la seule colonne unique de retour dans la jointure ensemble que vous pouvez utiliser ce qui suit:.

SELECT [Articles].[ID], [Articles_versions].[article], [Articles_versions].[lang], MAX([Articles_versions].[time]) 
FROM Articles Inner Join Articles_versions ON [Articles].[ID] = [Articles_versions].[article] 
GROUP BY [Articles].[ID], [Articles_versions].[article], [Articles_versions].[lang] 
+0

cela ne récupère pas les dernières versions d'article. Donc MAX (temps) est le plus récent, mais les autres champs de article_versions ne sont pas – kravemir

Questions connexes