How to write a join query for many to many relationship? for dictionary project

时间:2016-03-28 10:09:32

标签: mysql

I have working on database for dictionary project. I have to store a word and meaning with -- many to many -- relationship.

Below I have mentioned the sample with my table structure. I hope the table structure is right, but I don't know how to select all meanings for single word while user searching.

And also I have to write a query to select all word linked to a single meaning.

And also I have to write a query to select all meaning linked to a single word.

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

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 | 
    +----+----------+
    |  A |  X       | 
    |  A |  Y       | 
    |  A |  Z       | 
    +----+----------+

I don't know how to write a join query for this scenario.

2 个答案:

答案 0 :(得分:1)

SELECT wt.word, mt.meaning
FROM word_table wt
INNER JOIN word_meaning_table wmt
    ON wt.id = wmt.word_id
INNER JOIN meaning_table mt
    ON wmt.meaning_id = mt.id
WHERE wt.word = 'A'

请点击以下链接查看有效的演示:

SQLFiddle

答案 1 :(得分:0)

尝试

select word, meaning
from word_table
join meaning_table on word_table.id=meaning_table.id;