我如何将第 3 个 table 包含到连接中,而不用担心 table 是否有可以连接的行?
How can I include a 3rd table to a join but not worry if that table has rows that can be joined?
我有一个规范化数据库,其中 table 可能有也可能没有与其他相关 table 相关的信息。例如
字table
- id
- 价值
定义table
- id
- foreignk(至 word.id)
- 价值
原产国
- id
- foreignk(至 definition.id)
- 价值
例如,加入单词和定义 table 完全没有问题,但如果单词条目可能有也可能没有国家/地区,我怎么/应该如何也加入国家/地区? (这只是一个例子,但我还有其他几个 table 处于相同情况)。
如果 word.id 在原产国 table 中有相应的条目,则此查询有效,但如果没有匹配的条目, returns 则什么也没有。
select * from word, definition, countryoforigin where
word.id = definition.fk and
word.id = 11 and
countryoforigin.fk = definition.id;
仅拆分查询并使用 countryoforigin.foreignk 上的 select 和 [=58] 单独对 countryoforigin table 执行单独的 select 操作会更好吗=]作为值?
可能是这样的:
SELECT
*
FROM
word
INNER JOIN
definition ON word.id = definition.fk
LEFT JOIN
countryoforigin ON countryoforigin.fk = definition.id
WHERE
word.id = 11
您描述的操作称为外部联接。这是安德鲁(正确)的完整语法答案。 OUTER
关键字是可选的语法糖。
SELECT * FROM word INNER JOIN definition ON word.id = definition.fk LEFT OUTER JOIN countryoforigin ON countryoforigin.fk = definition.id WHERE
word.id = 11
请注意,您可以指定左外连接或右外连接。对于左联接,将为联接表达式左侧 table 中的每一行生成结果行。对于右连接,会为连接表达式右侧 table 中的每一行生成结果行。
您可以只使用左连接并翻转 tables。
我有一个规范化数据库,其中 table 可能有也可能没有与其他相关 table 相关的信息。例如
字table
- id
- 价值
定义table
- id
- foreignk(至 word.id)
- 价值
原产国
- id
- foreignk(至 definition.id)
- 价值
例如,加入单词和定义 table 完全没有问题,但如果单词条目可能有也可能没有国家/地区,我怎么/应该如何也加入国家/地区? (这只是一个例子,但我还有其他几个 table 处于相同情况)。
如果 word.id 在原产国 table 中有相应的条目,则此查询有效,但如果没有匹配的条目, returns 则什么也没有。
select * from word, definition, countryoforigin where
word.id = definition.fk and
word.id = 11 and
countryoforigin.fk = definition.id;
仅拆分查询并使用 countryoforigin.foreignk 上的 select 和 [=58] 单独对 countryoforigin table 执行单独的 select 操作会更好吗=]作为值?
可能是这样的:
SELECT
*
FROM
word
INNER JOIN
definition ON word.id = definition.fk
LEFT JOIN
countryoforigin ON countryoforigin.fk = definition.id
WHERE
word.id = 11
您描述的操作称为外部联接。这是安德鲁(正确)的完整语法答案。 OUTER
关键字是可选的语法糖。
SELECT * FROM word INNER JOIN definition ON word.id = definition.fk LEFT OUTER JOIN countryoforigin ON countryoforigin.fk = definition.id WHERE
word.id = 11
请注意,您可以指定左外连接或右外连接。对于左联接,将为联接表达式左侧 table 中的每一行生成结果行。对于右连接,会为连接表达式右侧 table 中的每一行生成结果行。
您可以只使用左连接并翻转 tables。