mySQL自然连接以显示类似于左外连接的结果

mySQL自然连接以显示类似于左外连接的结果,mysql,sql,database-design,join,Mysql,Sql,Database Design,Join,我有以下mySQL查询: SELECT * FROM `objects` natural join `gPeople` natural join `gVip` natural join `gTeachers` 返回: object_id name vip_code subject ---------------------------------------------------------- 003 John

我有以下mySQL查询:

SELECT * FROM `objects`
natural join `gPeople`
natural join `gVip`
natural join `gTeachers`
返回:

object_id       name            vip_code           subject
----------------------------------------------------------
003             John            9003               Math
这是因为“约翰”在人群、贵宾和老师中

我有两个小组中的其他人,希望他们表现出:

object_id       name            vip_code           subject
----------------------------------------------------------
001             Mary                               History
002             Holly           9002               
003             John            9003               Math
我曾尝试过左外连接,但由于我使用结果的方式,我最终得到了许多objects_id列的副本,这是不需要的

注意:我必须使用*因为它是我要做的事情的核心。我需要表能够支持添加/删除的列,并且查询能够提取它们

这是我尝试过的SQL小提琴,但我的结果如下所示:

object_id   object_id   name      object_id   vip_code     object_id   subject
------------------------------------------------------------------------------
001         001         Mary                               001         History
002         002         Holly     002         9002                            
003         003         John      003         9003         003         Math

有人知道这样做的方法吗?

我可以通过在PHP中编辑结果来解决我的问题

$sql = "SELECT `o`.`object_id` AS `ID`, `gP`.*, `gV`.*, `gT`.* FROM `objects` `o`
left outer join `gPeople` `gP` ON `o`.`object_id` = `gP`.`object_id`
left outer join `gVip` `gV` ON `o`.`object_id` = `gV`.`object_id`
left outer join `gTeachers` `gT` ON `o`.`object_id` = `gT`.`object_id`";

$result = mysql_query($sql);

while ($row = mysql_fetch_object($result)) {
    $row->object_id = $row->ID;
    unset($row->ID);
}
这导致:

object_id       name            vip_code           subject
----------------------------------------------------------
001             Mary                               History
002             Holly           9002               
003             John            9003               Math
而不是:

object_id       name            vip_code           subject
----------------------------------------------------------
001             Mary                               History
                Holly           9002               
003             John            9003               Math
似乎因为表gSubject中没有object 002的object_id,所以它会用空值覆盖结果中的object_id


i、 e.对于第一个过程对象表上的对象002,它等于002,然后在第二个过程gPeople表上,它再次被002覆盖,然后在第三个过程gVip表上,它再次被002覆盖,然后在最后一个过程gTeachers表上,它被null覆盖,因为表中没有它的记录。

引用:我已经尝试过左键joinsA更好的回应应该是发布一些code@Craig你能发布一些表格结构吗?如果可能,请使用SQL FIDLE。这里是SQL小提琴,但结果不是我得到的。我会在一秒钟内编辑帖子,以显示我得到的结果。