我有以下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小提琴,但我的结果如下:
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
任何人都知道这样做的方法吗?
答案 0 :(得分: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覆盖,因为表中没有记录。