如果没有匹配的记录,则在JOIN中选择NULL作为值

时间:2014-03-03 05:20:15

标签: mysql sql relational-database

我在MySQL数据库中有三个表:一个用于语言的查找表,一个用于动物的查找表和一个描述每种语言中每个动物被调用的内容的第三个表。

Table: languages
language_id
language_name

Table: animals
animal_id
animal_code
animal_name

Table: language_animal_codes
language_animal_code_id
language_id
animal_id
language_animal_code

填充语言和language_animal_codes表。我需要为用户创建一个表单来填充动物表。当然,在动态表完全填充之前,一些language_animal_codes.animal_id将为空。

我需要查询包含每种动物在每种语言中调用的内容的记录,如下所示:

SELECT e.language_name, ecc.language_animal_code FROM language_animal_codes ecc, languages e WHERE e.language_id = ecc.language_id

结果集如下所示:

language_name | language_animal_code
------------------------------------
English       | cat
French        | chat
English       | dog

这让我对自己想要的东西有所了解。如果记录存在,我还需要知道动物表中的animal_code,否则我需要将animal_code列设为null:

language_name | language_animal_code | animal_code
--------------------------------------------------
English       | cat                  | Felis catus
French        | chat                 | Felis catus
English       | dog                  | NULL

这似乎应该是一个常见的问题,但在搜索查找表上的联接联结表等术语时,我无法提出任何适用的内容。

2 个答案:

答案 0 :(得分:1)

尝试使用JOINS。示例查询可以是:

SELECT e.language_name,
ecc.language_animal_code,
a.animal_code
FROM language_animal_codes ecc
INNER JOIN languages e
ON e.language_id = ecc.language_id
LEFT OUTER JOIN animals a
ON ecc.animal_id = a.animal_id

答案 1 :(得分:-1)

SELECT * FROM POPULATED_TABLE RIGHT OUTER JOIN SPARSELY_POPULATED_TABLE USING (JOIN_COLUMN)