我有一个规范化的数据库,其中表可能有或没有与其他相关表有关的信息。例如
单词表
定义表
countryoforigin
例如,在这里加入单词和定义表完全没有问题,但是如果单词条目可能有也可能没有countryoforigin,我怎么能/我应该加入countryoforigin? (这只是一个例子,但在同样的情况下我还有其他几个表。)
如果word.id在countryoforigin表中有相应的条目但是如果没有匹配的条目则根本不返回任何内容,则此查询有效。
select * from word, definition, countryoforigin where
word.id = definition.fk and
word.id = 11 and
countryoforigin.fk = definition.id;
分割查询并在countryoforigin表上单独执行一个单独的select操作,使用countryoforigin.foreignk上的select和definition.id作为值,会更好吗?
答案 0 :(得分:1)
也许是这样的:
SELECT
*
FROM
word
INNER JOIN
definition ON word.id = definition.fk
LEFT JOIN
countryoforigin ON countryoforigin.fk = definition.id
WHERE
word.id = 11
答案 1 :(得分:1)
您描述的操作称为外连接。这是安德鲁(正确)答案的完整语法。 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
注意您可以指定左外连接或右外连接。对于左连接,将为连接表达式左侧表中的每一行生成结果行。对于右连接,将为连接表达式右侧表中的每一行生成结果行。
您可以使用左连接并翻转表格。