SQL连接通过非规范化表 - 选择语法是什么?

时间:2011-10-16 20:05:19

标签: mysql sql database

我在记住数据库查询时遇到了一些麻烦 - 已经有一段时间了:(

假设我有一些表格:

WORDS {ID, WORD}
FILES {ID, URL}
FILES_WORDS {WORDID, FILEID, COUNT}

WORDS和FILES分别具有PK的命名ID和字/路径的字符串。 FILES_WORDS会对多对多关系进行重新分析,并保留每个单词出现在每个文件中的次数。

我知道我可以选择给定文件的信息,如下所示:

SELECT FILES.URL, WORDS.WORD, FILES_WORDS.COUNT FROM WORDS, FILES, FILES_WORDS
    WHERE FILES_WORDS.FILEID = FILES.ID AND FILES_WORDS.WORDID = WORDS.ID AND
    IFILE.ID = 1;

我确信使用连接和类似的东西有一个更清晰的语法,但我在谷歌搜索或记住它时遇到了麻烦。任何人都可以帮助加快/清理它吗?

4 个答案:

答案 0 :(得分:2)

我认为你正在寻找这样的东西:

SELECT F.URL, W.WORD, FW.COUNT 
FROM WORDS W
  INNER JOIN FILES_WORDS FW
    ON FW.WORDID = W.ID
  INNER JOIN FILES F
    ON FW.FILEID = F.ID
WHERE FW.FILEID = 1;

但它不一定更快。取决于数量,指数等。

我使用别名(表格的一个字母昵称),因为它更容易遵循,我认为你不需要两个连接,但这也取决于你想要做什么。

答案 1 :(得分:1)

SELECT FILES.URL, WORDS.WORD, FILES_WORDS.COUNT 
FROM WORDS INNER JOIN FILES_WORDS ON WORDS.ID = FILES_WORDS.WORDID
          LEFT JOIN FILES ON FILES_WORDS.FILEID = FILES.ID

标记您要查询的内容

IFILE.ID = 1;

答案 2 :(得分:0)

尝试:

SELECT f.URL, w.WORD, fw.COUNT
FROM words w INNER JOIN files_words fw 
  ON f.id = fw.fileid
INNER JOIN words w
  ON fw.wordid = w.id
WHERE f.id = 1

答案 3 :(得分:0)

这是查询 -

SELECT FILES.URL, WORDS.WORD, FILES_WORDS.COUNT 
FROM WORDS W
Join FILES_WORDS WF
  on W.ID = WF.WORDID
Join FILES F
  on F.ID = FW.FILEID 
Where F.ID = 1;