1

我有以下 mySQL 查询:

SELECT * FROM `objects`
natural join `gPeople`
natural join `gVip`
natural join `gTeachers`

返回:

object_id       name            vip_code           subject
----------------------------------------------------------
003             John            9003               Math

这是因为“John”属于 People、Vip 和 Teachers 组。

我只有两组其他人,并希望他们显示如下:

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

我尝试了左外连接,但最终得到了 objects_id 列的许多副本,由于我使用结果的方式,这不是我们所希望的。

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

http://sqlfiddle.com/#!2/eefe7/3/0这是我尝试过的 SQL Fiddle 但是我的结果如下所示:

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

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

4

1 回答 1

0

我能够通过在 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

似乎因为对象 002 的表 gSubject 中没有 object_id,所以它用空值覆盖了结果中的 object_id。

即,对于第一遍(对象表)上的对象 002,它等于 002,然后在第二遍(gPeople 表)上,它再次被 002 覆盖,然后在第三遍(gVip 表)上,它再次被 002 覆盖,然后在最后一遍(gTeachers 表)它被 null 覆盖,因为表中没有它的记录。

于 2012-11-29T03:49:37.537 回答