• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:左辺外部結合について教えて下さい)

左辺外部結合についてのご質問 | MySQLとPHPを使用して存在しないカラムをNULLで表示させる方法

このQ&Aのポイント
  • MySQLとPHPを使用して、存在しないカラムをNULLで表示させる方法について教えてください。
  • 左辺外部結合を使って、主キーでグループ化しながら存在しないカラムをNULLで表示させる方法を教えてください。
  • 質問の過去ログを参考にして、現在試したクエリと結果をご紹介します。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

縦軸を横軸にうつすにはピボットテーブルという 仕組みを使うのが便利です。 なれるまでは難しいかもしれませんが、 副問合せのない3.23系でもじゅうぶん機能するので 非常に使いがってがよく是非お試しください。 とりあえずピボットテーブルはテンポラリーで 作れば手離れよいでしょう。 なお、ピボットテーブルを使った場合、原理的に NULLは発生せず「0」になります。 以下SQL CREATE TEMPORARY TABLE `PIVOT`(`jyankey` INT,`1` INT,`2` INT,`3` INT,`4` INT,`5` INT,`6` INT); INSERT INTO `PIVOT` VALUES ('1,','1','0','0','0','0','0') ,('2,','0','1','0','0','0','0') ,('3,','0','0','1','0','0','0') ,('4,','0','0','0','1','0','0') ,('5,','0','0','0','0','1','0') ,('6,','0','0','0','0','0','1'); SELECT `nkey` ,SUM(`1`*`jyanno`) AS `1` ,SUM(`2`*`jyanno`) AS `2` ,SUM(`3`*`jyanno`) AS `3` ,SUM(`4`*`jyanno`) AS `4` ,SUM(`5`*`jyanno`) AS `5` ,SUM(`6`*`jyanno`) AS `6` FROM `soubi` LEFT JOIN `PIVOT` ON `soubi`.`jyankey`=`PIVOT`.`jyankey` GROUP BY `nkey`;

sibazuke
質問者

お礼

yambejp 様。 こんばんは。 丁寧なご指導、ありがとうございました。 教えて頂いたSQL文で、ばっちり希望した 動きになりました。 サブクエリが使えなくても、こんなに便利な方法が あったのですね! もっと勉強しなければと、思いました。 この度は、本当にありがとう御座いました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

例の意味がわかりません。 もう少し簡潔に、どのような構成で どのような処理をしたときに、どういう結果を 期待しているのか、明確にしないと回答に 困る質問ないようかとおもいます。

sibazuke
質問者

お礼

続きです。 soubiテーブルを、nkeyでグループ化して、6レコードあるjyankeyを横の項目として、テーブル一覧にしたいのです。 【現在はこうなってしまっています】 +------+------+------+------+------+------+------+------+ | nkey | 1 | 2 | 3 | 4 | 5 | 6 | 7 | +------+------+------+------+------+------+------+------+ | 1 | 10 | NULL | NULL | NULL | NULL | NULL | NULL | | 1 | NULL | 3 | NULL | NULL | NULL | NULL | NULL | | 1 | NULL | NULL | 2 | NULL | NULL | NULL | NULL | | 1 | NULL | NULL | NULL | 8 | NULL | NULL | NULL | | 2 | 10 | NULL | NULL | NULL | NULL | NULL | NULL | | 2 | NULL | 8 | NULL | NULL | NULL | NULL | NULL | | 2 | NULL | NULL | 7 | NULL | NULL | NULL | NULL | | 2 | NULL | NULL | NULL | 8 | NULL | NULL | NULL | | 2 | NULL | NULL | NULL | NULL | 10 | NULL | NULL | | 2 | NULL | NULL | NULL | NULL | NULL | 1 | NULL | | 4 | 10 | NULL | NULL | NULL | NULL | NULL | NULL | | 4 | NULL | 10 | NULL | NULL | NULL | NULL | NULL | | 4 | NULL | NULL | 8 | NULL | NULL | NULL | NULL | | 4 | NULL | NULL | NULL | 7 | NULL | NULL | NULL | | 4 | NULL | NULL | NULL | NULL | 8 | NULL | NULL | | 4 | NULL | NULL | NULL | NULL | NULL | 1 | NULL | +------+------+------+------+------+------+------+------+ 上記の状態ではなく、下記の状態にしたいのです。 +------+------+------+------+------+------+------+ | nkey | 1 | 2 | 3 | 4 | 5 | 6 | +------+------+------+------+------+------+------+ | 1 | 10 | 3 | 2 | 8 | NULL | NULL | | 2 | 10 | 8 | 7 | 8 | 10 | 1 | | 4 | 10 | 10 | 8 | 7 | 8 | 1 | +------+------+------+------+------+------+------+

sibazuke
質問者

補足

yambejp様。 こんばんは。レスありがとうございます。 投降時に、文字数制限でひっかかり、文字を削除して 投降したので、質問内容が不十分になってしまいました。 自分の投降の時には、レスを付けられないので、補足を 足す事も出来ず、困っていたのです。 細かく書かせて頂きます。 【テーブル構造】 mysql> select * from jyan; +---------+----------+ | jyankey | jyanname | +---------+----------+ | 1 | 顔型 | | 2 | 髪型 | | 3 | 上着 | | 4 | 下着 | | 5 | 靴 | | 6 | アイテム | +---------+----------+ 6 rows in set (0.13 sec) mysql> select *from name; +------+------+------+------+------------+--------+------+ | nkey | name | age | sei | tou | fuken | kahi | +------+------+------+------+------------+--------+------+ | 1 | 田中 | 17 | 2 | 2005/12/25 | 大阪府 | 可 | | 2 | 佐藤 | 20 | 1 | 2006/02/25 | 京都府 | 可 | | 3 | 鈴木 | 25 | 2 | 2006/04/25 | 北海道 | 可 | | 4 | 山田 | 30 | 1 | 2006/03/25 | 東京都 | 可 | | 5 | 阿部 | 19 | 2 | 2005/11/25 | 大阪府 | 可 | +------+------+------+------+------------+--------+------+ 5 rows in set (0.03 sec) mysql> select * from soubi; +--------+------+---------+--------+ | soukey | nkey | jyankey | jyanno | +--------+------+---------+--------+ | 1 | 1 | 1 | 10 | | 2 | 1 | 2 | 3 | | 3 | 1 | 3 | 2 | | 4 | 1 | 4 | 8 | | 5 | 2 | 1 | 10 | | 6 | 2 | 5 | 10 | | 7 | 2 | 2 | 8 | | 8 | 2 | 3 | 7 | | 9 | 2 | 4 | 8 | | 10 | 2 | 6 | 1 | | 11 | 4 | 1 | 10 | | 12 | 4 | 2 | 10 | | 13 | 4 | 3 | 8 | | 14 | 4 | 4 | 7 | | 15 | 4 | 5 | 8 | | 16 | 4 | 6 | 1 | +--------+------+---------+--------+ 16 rows in set (0.05 sec)

関連するQ&A