IN和JOIN之间的SQL差异

时间:2016-02-07 13:02:07

标签: sql join relational-database relational-algebra

首先我需要说的是,虽然我接受过关系代数教育,但我可以安全地假设我没有正式的SQL教育。

我正在研究解决以下问题的最佳方法。

我们的数据库为每个文本保留文本和关键字。

Articles
id | text

Keywords
id | word

Articles_keywords
id_article | id_keyword

为了这个问题,答案的提供者可以假设表被索引但是有人想要。

所以问题是获取所有具有特定关键字的文章。

我已经与两组人进行了交谈,他们以两种方式解决了这个问题,他们都声称其他群体的做法是错误的。

使用IN运算符的第一个解决方案:

SELECT * FROM Articles AS a WHERE a.id IN 
    (SELECT id_article FROM Articles_Keywords AS ak WHERE ak.id_keyword IN 
        (SELECT id FROM keywords AS k WHERE k.word = 'xyz'));

其他解决方案当然是使用JOIN运算符:

SELECT * FROM Articles as a 
    JOIN Articles_Keywords as ak 
        ON a.id = ak.id_article
    JOIN Keywords as k 
        ON k.id = ak.id_keyword
WHERE k.word = 'xyz';

哪种方法更好,最重要的是,为什么?

修改

在articles表中,我们有一个唯一的id列,只是为了这个问题,我们可以假设没有重复的文本。

关键字表也是如此。

在article_keywords表中,有序对(id_article,id_keyword)是唯一的

0 个答案:

没有答案