mysql - 我需要多对多关系查询的帮助

标签 mysql

我正在研究字典项目的数据库。我必须以多对多关系存储单词和含义。

下面我提到了带有我的表结构的示例。我希望表结构是正确的,但我不知道如何在用户搜索时选择单个单词的所有含义。

而且我还必须编写一个查询来选择与单个含义相关的所有单词和同义词。而且我还必须编写一个查询来选择链接到单个单词的所有含义和同义词。

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        | 
    +---------+-----------+ 

Expected output should be like this.

If user searching for a word "A" in word table the result should be

Result for word "A"
    +----+----------+---------+ 
    | word| meaning | synonys |
    +----+----------+---------+ 
    |  A |  X       | aa      |
    |  A |  Y       | bb      |
    |  A |  Z       | cc      |
    +----+----------+---------+

最佳答案

你只需要很多连接:

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)

让我向您推荐this document解释了有关连接语法的所有内容。

关于mysql - 我需要多对多关系查询的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36261747/

相关文章:

MYSQL 非规范化表查找

mysql - 在另一列上排列一列

php - 当用户看到通知时更新阅读列

mysql - 需要 SQL 专家来处理复杂的查询

多对多关系的 CREATE TABLE 上的 MySQL 错误

php - 每 24 小时访问一次站点

java - MySql 数据在第 1 行的 'advance' 列被截断

mysql - 具有多个子查询的查询优化

php - 向 MySQL 数据库添加多个字段

mysql - ORDER BY 和 GROUP BY 这些结果在单个查询中