Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 连接3个SQL表_Mysql_Sql - Fatal编程技术网

Mysql 连接3个SQL表

Mysql 连接3个SQL表,mysql,sql,Mysql,Sql,我有3张类似这样的桌子: Table1: PersonSSN NumberOfCars Table2: PersonSSN NumberOfPhones Table3: PersonName PersonSSN 表1和表2都有一个关于PersonsN的表3的外键引用 我需要以这样一种方式加入其中,以便: 个人姓名电话号码汽车号码 以下是适用于联接的一些条件: 如果一个人在表1和表2中都有一个条目,我会看到为他填充的所有3个字段 如果一个人在表1中有一个条目,而不是在表2中,他应该仍然出现,

我有3张类似这样的桌子:

Table1:
PersonSSN
NumberOfCars

Table2:
PersonSSN
NumberOfPhones

Table3:
PersonName
PersonSSN
表1和表2都有一个关于PersonsN的表3的外键引用

我需要以这样一种方式加入其中,以便: 个人姓名电话号码汽车号码

以下是适用于联接的一些条件:

  • 如果一个人在表1和表2中都有一个条目,我会看到为他填充的所有3个字段
  • 如果一个人在表1中有一个条目,而不是在表2中,他应该仍然出现,但NumberOfPhones设置为0
  • 同样,如果一个人在表2中有一个条目,而不是在表1中,他应该仍然出现,但NumberOfCars设置为0

  • 这能在一个查询中实现吗?如果是,查询应该是什么

    这是一个
    左外连接
    查询:

    select t3.name, coalesce(t1.NumberOfPhones, 0), coalesce(t2.NumberOfCars, 0)
    from table3 t3 left outer join
         table1 t1
         on t3.ssn = t1.ssn left outer join
         table2 t2
         on t3.ssn = t2.ssn;
    

    这是一个
    左外部联接
    查询:

    select t3.name, coalesce(t1.NumberOfPhones, 0), coalesce(t2.NumberOfCars, 0)
    from table3 t3 left outer join
         table1 t1
         on t3.ssn = t1.ssn left outer join
         table2 t2
         on t3.ssn = t2.ssn;
    

    这似乎不起作用。我遗漏了表2中的数据,但表1中没有。其他一切看起来都很好。@山:请考虑提供一个演示如何解决这个问题,因为,据我所知,它应该工作。@山…是否所有的
    SSN
    都在
    表3
    中?如果
    表3
    没有涵盖这两个表中的全部人口,就会发生这种情况。@GordonLinoff,是的,他们是。@AndriyM。这里有一个例子。您可以看到,有些记录(Name2、Name3)满足WHERE子句,但没有显示。此外,出现的Name1记录不准确。这似乎不起作用。我遗漏了表2中的数据,但表1中没有。其他一切看起来都很好。@山:请考虑提供一个演示如何解决这个问题,因为,据我所知,它应该工作。@山…是否所有的
    SSN
    都在
    表3
    中?如果
    表3
    没有涵盖这两个表中的全部人口,就会发生这种情况。@GordonLinoff,是的,他们是。@AndriyM。这里有一个例子。您可以看到,有些记录(Name2、Name3)满足WHERE子句,但没有显示。此外,显示的Name1记录也不准确。