gpt4 book ai didi

MySQL 我怎样才能更好地查询通过我的桥接表连接两个表?

转载 作者:搜寻专家 更新时间:2023-10-30 20:36:16 25 4
gpt4 key购买 nike

我有这些表:

单词:

+----+------+
| ID | DATA |
+----+------+
| 1 | jo |
| 2 | yes |
| 3 | jupp |
| 4 | yeah |
| 5 | jepp |
| 6 | joah |
| 7 | ne |
| 8 | nee |
| 9 | no |
| 10 | nope |
| 11 | nah |
+----+------+

声明:

+----+------+
| ID | DATA |
+----+------+
| 1 | ja |
| 2 | nein |
+----+------+

还有一个桥接表,将表“words”中的单词与表“statements”中的数据连接起来:

桥梁:

+--------------+---------+
| ID_statement | ID_word |
+--------------+---------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 1 | 6 |
| 2 | 8 |
| 2 | 9 |
+--------------+---------+

我想得到一个 SELECT QUERY 来获取与语句“ja”相关的所有单词。

这个查询完成了工作,但似乎比它应该的更复杂:

SELECT words.DATA FROM words 
JOIN bridge ON words.ID = bridge.ID_word
JOIN statements ON statements.ID = bridge.ID_statement
WHERE statements.ID = (
SELECT ID FROM statements WHERE statements.DATA = "ja"
);

直觉告诉我,我做的太复杂了,但我想不出复杂的地方。尴尬。

最佳答案

我喜欢将主键命名为与引用它们的列相同的名称。因此,在您的示例中,在 words 表中,您将主键命名为 ID_word。在 statements 表中,您将主键命名为 ID_statement

优点是您可以使用 USING(...) 语法使您的 SQL 连接更加简洁。此语法假定在连接的两个表中都有一个同名的列,并且您希望连接匹配该列与另一个表中的同一列相同的位置。

SELECT words.DATA FROM words 
JOIN bridge USING (ID_word)
JOIN statements USING (ID_statement)
WHERE statements.DATA = 'ja';

此外,您不需要在示例中运行子查询。语句中与 DATA='ja' 语句中行的 ID 匹配的行与语句 where DATA='ja' 中的行相同。 p>

how would one describe the relationship here? one-to-many?

由桥接表建模的关系是多对多 关系。您的示例中的具体数据没有显示出来,但许多不同的语句可能引用同一个词。你所展示的是每个语句都可以引用很多单词。

关于MySQL 我怎样才能更好地查询通过我的桥接表连接两个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38256570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com