Mam następujące tabele:

  • Artykuł (idArtykuł)
  • Tag artykułu (idArticle, idTag)
  • Tag (idTag)

Chcę uzyskać wszystkie artykuły, które mają takie same tagi jak artykuł „5”, próbowałem tak:

SELECT DISTINCT Article.*
FROM Article
INNER JOIN ArticleTag ON Article.idArticle = ArticleTag.idArticle 
       AND ArticleTag.idArticle = "5"
WHERE 1 = 1
ORDER BY title
LIMIT 40

Ale pokazuje wszystkie artykuły, a nie te z nimi powiązane.

2
Raul Leaño Martinet 20 luty 2012, 09:43

2 odpowiedzi

Najlepsza odpowiedź

Próbować

select a.* from Article a
inner join ArticleTag at
  on at.idArticle = a.idArticle
where at.idTag in (select idTag from ArticleTag where idArticle =5)

Lub

select a.* from Article a
inner join ArticleTag at on at.idArticle= a.idArticle
inner join ArticleTag at2 on at2.idTag = a.idTag and at2.IdArticle! = at.idArticle
where at2.idArticle = 5
2
silly 20 luty 2012, 10:02
SELECT DISTINCT Article.*
FROM Article
INNER JOIN ArticleTag ON Article.idArticle = ArticleTag.idArticle 
WHERE ArticleTag.idTag IN 
(SELECT ArticleTag.idTag FROM ArticleTag WHERE ArticleTag.idArticle = '5')
ORDER BY Article.title
LIMIT 40;
1
Brian Roach 20 luty 2012, 09:51