Mysql 在FK中使用空值联接表

Mysql 在FK中使用空值联接表,mysql,join,Mysql,Join,我想从三个表中选择一些值,这些表由外键关联 包含外键的表在该FK中可能有空值 当我从三个表中选择时,我不会得到FK为空的行 例如,这些是我的表格: 表1(boninterne): +---------+-----------+----------+----------+ | num | date | codePers | codeDept | +---------+-----------+----------+----------+ |1 |12/10/2012

我想从三个表中选择一些值,这些表由外键关联

包含外键的表在该FK中可能有空值

当我从三个表中选择时,我不会得到FK为空的行

例如,这些是我的表格:

表1(boninterne):

+---------+-----------+----------+----------+
|   num   |   date    | codePers | codeDept |
+---------+-----------+----------+----------+
|1        |12/10/2012 +  NULL    |  2       |
+---------+-----------+----------+----------+
|2        |12/10/2012 |  NULL    |  NULL    |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  1       |  2       |
+---------+-----------+----------+----------+
|4        |12/10/2012 |  4       |  NULL    |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  12      |  2       |
+---------+-----------+----------+----------+
|6        |12/10/2012 |  3       |  NULL    |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  1       |  2       |
+---------+-----------+----------+----------+
|8        |12/10/2012 |  NULL    |  3       |
+---------+-----------+----------+----------+
+---------+-----------+----------+
|codePers |prenomPers | nomPers  |
+---------+-----------+----------+
|1        |AA         +  ZZ      |
+---------+-----------+----------+
|4        |BB         |  WW      |
+---------+-----------+----------+
|3        |CC         |  XX      |
+---------+-----------+----------+
|12       |DD         |  VV      |
+---------+-----------+----------+
+---------+-----------+
|codeDept |libDept    |
+---------+-----------+
|2        |DEPT A1    +
+---------+-----------+
|3        |DEPT B1    |
+---------+-----------+
SELECT num, date, CONCAT(prenomPers,' ',nomPers) AS nom, libDept 
FROM boninterne, personnel, departement
WHERE boninterne.codePers = personnel.codePers
AND boninterne.codeDept = departement.codeDept
+---------+-----------+----------+----------+
|   num   |   date    | nom      | libDept  |
+---------+-----------+----------+----------+
|1        |12/10/2012 +  NULL    |  DEPT A1 |
+---------+-----------+----------+----------+
|2        |12/10/2012 |  NULL    |  NULL    |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|4        |12/10/2012 |  BB WW   |  NULL    |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  DD VV   |  DEPT A1 |
+---------+-----------+----------+----------+
|6        |12/10/2012 |  CC XX   |  NULL    |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|8        |12/10/2012 |  NULL    |  DEPT B1 |
+---------+-----------+----------+----------+
+---------+-----------+----------+----------+
|   num   |   date    | nom      | libDept  |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  DD VV   |  DEPT A1 |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
表2(人员):

+---------+-----------+----------+----------+
|   num   |   date    | codePers | codeDept |
+---------+-----------+----------+----------+
|1        |12/10/2012 +  NULL    |  2       |
+---------+-----------+----------+----------+
|2        |12/10/2012 |  NULL    |  NULL    |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  1       |  2       |
+---------+-----------+----------+----------+
|4        |12/10/2012 |  4       |  NULL    |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  12      |  2       |
+---------+-----------+----------+----------+
|6        |12/10/2012 |  3       |  NULL    |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  1       |  2       |
+---------+-----------+----------+----------+
|8        |12/10/2012 |  NULL    |  3       |
+---------+-----------+----------+----------+
+---------+-----------+----------+
|codePers |prenomPers | nomPers  |
+---------+-----------+----------+
|1        |AA         +  ZZ      |
+---------+-----------+----------+
|4        |BB         |  WW      |
+---------+-----------+----------+
|3        |CC         |  XX      |
+---------+-----------+----------+
|12       |DD         |  VV      |
+---------+-----------+----------+
+---------+-----------+
|codeDept |libDept    |
+---------+-----------+
|2        |DEPT A1    +
+---------+-----------+
|3        |DEPT B1    |
+---------+-----------+
SELECT num, date, CONCAT(prenomPers,' ',nomPers) AS nom, libDept 
FROM boninterne, personnel, departement
WHERE boninterne.codePers = personnel.codePers
AND boninterne.codeDept = departement.codeDept
+---------+-----------+----------+----------+
|   num   |   date    | nom      | libDept  |
+---------+-----------+----------+----------+
|1        |12/10/2012 +  NULL    |  DEPT A1 |
+---------+-----------+----------+----------+
|2        |12/10/2012 |  NULL    |  NULL    |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|4        |12/10/2012 |  BB WW   |  NULL    |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  DD VV   |  DEPT A1 |
+---------+-----------+----------+----------+
|6        |12/10/2012 |  CC XX   |  NULL    |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|8        |12/10/2012 |  NULL    |  DEPT B1 |
+---------+-----------+----------+----------+
+---------+-----------+----------+----------+
|   num   |   date    | nom      | libDept  |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  DD VV   |  DEPT A1 |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
表3(部门):

+---------+-----------+----------+----------+
|   num   |   date    | codePers | codeDept |
+---------+-----------+----------+----------+
|1        |12/10/2012 +  NULL    |  2       |
+---------+-----------+----------+----------+
|2        |12/10/2012 |  NULL    |  NULL    |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  1       |  2       |
+---------+-----------+----------+----------+
|4        |12/10/2012 |  4       |  NULL    |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  12      |  2       |
+---------+-----------+----------+----------+
|6        |12/10/2012 |  3       |  NULL    |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  1       |  2       |
+---------+-----------+----------+----------+
|8        |12/10/2012 |  NULL    |  3       |
+---------+-----------+----------+----------+
+---------+-----------+----------+
|codePers |prenomPers | nomPers  |
+---------+-----------+----------+
|1        |AA         +  ZZ      |
+---------+-----------+----------+
|4        |BB         |  WW      |
+---------+-----------+----------+
|3        |CC         |  XX      |
+---------+-----------+----------+
|12       |DD         |  VV      |
+---------+-----------+----------+
+---------+-----------+
|codeDept |libDept    |
+---------+-----------+
|2        |DEPT A1    +
+---------+-----------+
|3        |DEPT B1    |
+---------+-----------+
SELECT num, date, CONCAT(prenomPers,' ',nomPers) AS nom, libDept 
FROM boninterne, personnel, departement
WHERE boninterne.codePers = personnel.codePers
AND boninterne.codeDept = departement.codeDept
+---------+-----------+----------+----------+
|   num   |   date    | nom      | libDept  |
+---------+-----------+----------+----------+
|1        |12/10/2012 +  NULL    |  DEPT A1 |
+---------+-----------+----------+----------+
|2        |12/10/2012 |  NULL    |  NULL    |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|4        |12/10/2012 |  BB WW   |  NULL    |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  DD VV   |  DEPT A1 |
+---------+-----------+----------+----------+
|6        |12/10/2012 |  CC XX   |  NULL    |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|8        |12/10/2012 |  NULL    |  DEPT B1 |
+---------+-----------+----------+----------+
+---------+-----------+----------+----------+
|   num   |   date    | nom      | libDept  |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  DD VV   |  DEPT A1 |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
这是我提出的问题:

+---------+-----------+----------+----------+
|   num   |   date    | codePers | codeDept |
+---------+-----------+----------+----------+
|1        |12/10/2012 +  NULL    |  2       |
+---------+-----------+----------+----------+
|2        |12/10/2012 |  NULL    |  NULL    |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  1       |  2       |
+---------+-----------+----------+----------+
|4        |12/10/2012 |  4       |  NULL    |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  12      |  2       |
+---------+-----------+----------+----------+
|6        |12/10/2012 |  3       |  NULL    |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  1       |  2       |
+---------+-----------+----------+----------+
|8        |12/10/2012 |  NULL    |  3       |
+---------+-----------+----------+----------+
+---------+-----------+----------+
|codePers |prenomPers | nomPers  |
+---------+-----------+----------+
|1        |AA         +  ZZ      |
+---------+-----------+----------+
|4        |BB         |  WW      |
+---------+-----------+----------+
|3        |CC         |  XX      |
+---------+-----------+----------+
|12       |DD         |  VV      |
+---------+-----------+----------+
+---------+-----------+
|codeDept |libDept    |
+---------+-----------+
|2        |DEPT A1    +
+---------+-----------+
|3        |DEPT B1    |
+---------+-----------+
SELECT num, date, CONCAT(prenomPers,' ',nomPers) AS nom, libDept 
FROM boninterne, personnel, departement
WHERE boninterne.codePers = personnel.codePers
AND boninterne.codeDept = departement.codeDept
+---------+-----------+----------+----------+
|   num   |   date    | nom      | libDept  |
+---------+-----------+----------+----------+
|1        |12/10/2012 +  NULL    |  DEPT A1 |
+---------+-----------+----------+----------+
|2        |12/10/2012 |  NULL    |  NULL    |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|4        |12/10/2012 |  BB WW   |  NULL    |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  DD VV   |  DEPT A1 |
+---------+-----------+----------+----------+
|6        |12/10/2012 |  CC XX   |  NULL    |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|8        |12/10/2012 |  NULL    |  DEPT B1 |
+---------+-----------+----------+----------+
+---------+-----------+----------+----------+
|   num   |   date    | nom      | libDept  |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  DD VV   |  DEPT A1 |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
我想要的表格是:

+---------+-----------+----------+----------+
|   num   |   date    | codePers | codeDept |
+---------+-----------+----------+----------+
|1        |12/10/2012 +  NULL    |  2       |
+---------+-----------+----------+----------+
|2        |12/10/2012 |  NULL    |  NULL    |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  1       |  2       |
+---------+-----------+----------+----------+
|4        |12/10/2012 |  4       |  NULL    |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  12      |  2       |
+---------+-----------+----------+----------+
|6        |12/10/2012 |  3       |  NULL    |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  1       |  2       |
+---------+-----------+----------+----------+
|8        |12/10/2012 |  NULL    |  3       |
+---------+-----------+----------+----------+
+---------+-----------+----------+
|codePers |prenomPers | nomPers  |
+---------+-----------+----------+
|1        |AA         +  ZZ      |
+---------+-----------+----------+
|4        |BB         |  WW      |
+---------+-----------+----------+
|3        |CC         |  XX      |
+---------+-----------+----------+
|12       |DD         |  VV      |
+---------+-----------+----------+
+---------+-----------+
|codeDept |libDept    |
+---------+-----------+
|2        |DEPT A1    +
+---------+-----------+
|3        |DEPT B1    |
+---------+-----------+
SELECT num, date, CONCAT(prenomPers,' ',nomPers) AS nom, libDept 
FROM boninterne, personnel, departement
WHERE boninterne.codePers = personnel.codePers
AND boninterne.codeDept = departement.codeDept
+---------+-----------+----------+----------+
|   num   |   date    | nom      | libDept  |
+---------+-----------+----------+----------+
|1        |12/10/2012 +  NULL    |  DEPT A1 |
+---------+-----------+----------+----------+
|2        |12/10/2012 |  NULL    |  NULL    |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|4        |12/10/2012 |  BB WW   |  NULL    |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  DD VV   |  DEPT A1 |
+---------+-----------+----------+----------+
|6        |12/10/2012 |  CC XX   |  NULL    |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|8        |12/10/2012 |  NULL    |  DEPT B1 |
+---------+-----------+----------+----------+
+---------+-----------+----------+----------+
|   num   |   date    | nom      | libDept  |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  DD VV   |  DEPT A1 |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
但我真正得到的是:

+---------+-----------+----------+----------+
|   num   |   date    | codePers | codeDept |
+---------+-----------+----------+----------+
|1        |12/10/2012 +  NULL    |  2       |
+---------+-----------+----------+----------+
|2        |12/10/2012 |  NULL    |  NULL    |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  1       |  2       |
+---------+-----------+----------+----------+
|4        |12/10/2012 |  4       |  NULL    |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  12      |  2       |
+---------+-----------+----------+----------+
|6        |12/10/2012 |  3       |  NULL    |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  1       |  2       |
+---------+-----------+----------+----------+
|8        |12/10/2012 |  NULL    |  3       |
+---------+-----------+----------+----------+
+---------+-----------+----------+
|codePers |prenomPers | nomPers  |
+---------+-----------+----------+
|1        |AA         +  ZZ      |
+---------+-----------+----------+
|4        |BB         |  WW      |
+---------+-----------+----------+
|3        |CC         |  XX      |
+---------+-----------+----------+
|12       |DD         |  VV      |
+---------+-----------+----------+
+---------+-----------+
|codeDept |libDept    |
+---------+-----------+
|2        |DEPT A1    +
+---------+-----------+
|3        |DEPT B1    |
+---------+-----------+
SELECT num, date, CONCAT(prenomPers,' ',nomPers) AS nom, libDept 
FROM boninterne, personnel, departement
WHERE boninterne.codePers = personnel.codePers
AND boninterne.codeDept = departement.codeDept
+---------+-----------+----------+----------+
|   num   |   date    | nom      | libDept  |
+---------+-----------+----------+----------+
|1        |12/10/2012 +  NULL    |  DEPT A1 |
+---------+-----------+----------+----------+
|2        |12/10/2012 |  NULL    |  NULL    |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|4        |12/10/2012 |  BB WW   |  NULL    |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  DD VV   |  DEPT A1 |
+---------+-----------+----------+----------+
|6        |12/10/2012 |  CC XX   |  NULL    |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|8        |12/10/2012 |  NULL    |  DEPT B1 |
+---------+-----------+----------+----------+
+---------+-----------+----------+----------+
|   num   |   date    | nom      | libDept  |
+---------+-----------+----------+----------+
|3        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+
|5        |12/10/2012 |  DD VV   |  DEPT A1 |
+---------+-----------+----------+----------+
|7        |12/10/2012 |  AA ZZ   |  DEPT A1 |
+---------+-----------+----------+----------+

我必须在查询中更改什么才能得到该表???

您的结果是正确的,因为您使用的是内部联接。您可以通过使用正确的联接语法并改为使用
左外部联接来解决此问题:

SELECT num, date, CONCAT(prenomPers,' ',nomPers) AS nom, libDept 
FROM boninterne
left outer join personnel
    on boninterne.codePers = personnel.codePers
left outer join departement
     on boninterne.codeDept = departement.codeDept;

这将保留第一个表中的所有内容,即使没有匹配项。

请使用ANSI 1992联接。在那之后你会更清楚。@Sebas你所说的ansi1992连接是什么意思?请参阅,在第179页(以后)中查找“查询表达式”他指的是显式的
连接。。。关于
语法。