Mysql 我需要多对多关系查询的帮助
我一直在为字典项目开发数据库。我必须用Mysql 我需要多对多关系查询的帮助,mysql,Mysql,我一直在为字典项目开发数据库。我必须用多对多关系存储单词和意思 下面我提到了我的表结构的示例。我希望表格结构是正确的,但我不知道如何在用户搜索时选择单个单词的所有含义 我还必须写一个查询来选择所有单词和同义词,这些单词和同义词都链接到一个单一的意义上。我还必须写一个查询来选择与单个单词相关的所有意义和同义词 word_table +----+------+ | id | word | +----+------+ | 1 | A | | 2 | B | | 3 |
多对多关系存储单词和意思
下面我提到了我的表结构的示例。我希望表格结构是正确的,但我不知道如何在用户搜索时选择单个单词的所有含义
我还必须写一个查询来选择所有单词和同义词,这些单词和同义词都链接到一个单一的意义上。我还必须写一个查询来选择与单个单词相关的所有意义和同义词
word_table
+----+------+
| id | word |
+----+------+
| 1 | A |
| 2 | B |
| 3 | C |
+----+------+
meaning_table
+----+--------+
| id | meaning|
+----+--------+
| 1 | X |
| 2 | Y |
| 3 | Z |
+----+--------+
word_meaning_table
+---------+-----------+
| word_id | meaning_id|
+---------+-----------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 3 |
| 3 | 2 |
| 3 | 3 |
+---------+-----------+
synonyms_table
+----+--------+
| id | synonys|
+----+--------+
| 1 | aa |
| 2 | bb |
| 3 | cc |
+----+--------+
word_synonyms_table
+---------+-----------+
| word_id | synonym_id|
+---------+-----------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
+---------+-----------+
预期的输出应该是这样的
如果用户在word表中搜索单词“a”,则结果应为
您只需要许多连接:
SELECT w.word,m.meaning,s.synonys
FROM word_table w
INNER JOIN word_meaning_table wm
ON(w.id = wm.word_id)
INNER JOIN meaning_table m
ON(wm.meaning_id = m.id)
INNER JOIN word_synonyms_table ws
ON(w.id = ws.word_id)
INNER JOIN synonyms_table s
ON(ws.synonym_id = s.id)
让我给你介绍一下关于连接语法的所有解释。当一个词没有同义词,只有一个意义时,内部连接不会完全忽略结果吗?我没有测试它,但可能其中一些应该是左联接。@PerlDog可能不是根据他提供的数据和输出,而是根据OP,如果是这样,并且某些表中可能缺少信息,请将这些表的联接从内部联接替换为左联接
SELECT w.word,m.meaning,s.synonys
FROM word_table w
INNER JOIN word_meaning_table wm
ON(w.id = wm.word_id)
INNER JOIN meaning_table m
ON(wm.meaning_id = m.id)
INNER JOIN word_synonyms_table ws
ON(w.id = ws.word_id)
INNER JOIN synonyms_table s
ON(ws.synonym_id = s.id)