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のグループに属しているためです。

私には2つのグループに他の人がいて、次のように見せてもらいたいです。

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

誰かがこれを行う方法を知っていますか?

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がnull値で上書きされているようです。

つまり、最初のパス(オブジェクトテーブル)のオブジェクト002の場合は002に等しく、2番目のパス(gPeopleテーブル)の場合は002で再度上書きされ、3番目のパス(gVipテーブル)の場合は002で再度上書きされ、最後のパスで上書きされます。 (gTeachersテーブル)テーブルにレコードがないため、nullで上書きされます。

于 2012-11-29T03:49:37.537 に答える