こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

複数テーブルSELECT*、NULLのカラムに別の値が代入されて出力される

複数テーブルSELECT*、NULLのカラムに別の値が代入されて出力される


こんにちは。
MySQLの経験が未ださほどないので、単純なミスかも知れませんが
少しアドバイスをお願いします。


複数テーブルに対してSELECT *を行うと、
本来NULLになるべきカラムに別の値が入った状態で出力されます。
*同一データベース内です


[Table_A]
   tel      name    links        regtime
000000000  サンプルA  okwave.jpA   1246247993
000000001  サンプルB  okwave.jpB   1246248003
000000002  サンプルC  okwave.jpC   1246249258

[Table_B]
  subject      name    body            password
サンプル書き込み1  サンプルD  サンプル1。ここが本文... 22521343
サンプル書き込み2  サンプルE  サンプル2。ここが本文... 4654387368
サンプル書き込み3  サンプルF  サンプル3。ここが本文... 13213843843

[Database]
tel デフォルト: NULL, 型: TINYTEXT
name デフォルト: NULL, 型: TEXT
links デフォルト: NULL, 型: TEXT
regtime デフォルト: NULL, 型: INT
subject デフォルト: NULL, 型: TEXT
body デフォルト: NULL, 型: TEXT
password デフォルト: NULL, 型: TINYTEXT


このとき、SELECT * FROM `Database`.`Table_A`, `Database`.`Table_B` LIMIT 0, 30;
を実行して得られた結果が、

   tel      name    links        regtime      subject       name       body        password
000000000  サンプルA  okwave.jpA   1246247993     NULL        NULL      NULL       22521343
000000001  サンプルB  okwave.jpB   1246248003     NULL        NULL      NULL       22521343
000000002  サンプルC  okwave.jpC   1246249258     NULL        NULL      NULL       22521343
000000000   NULL    NULL      1246247993  サンプル書き込み1  サンプルD  サンプル1。ここが本文... 22521343
000000000   NULL    NULL      1246247993  サンプル書き込み2  サンプルE  サンプル2。ここが本文... 4654387368
000000000   NULL    NULL      1246247993  サンプル書き込み3  サンプルF  サンプル3。ここが本文... 13213843843


このようになってしまいます。
そのテーブルが持たないカラムのうち数字のみが記録されているカラムだけ
勝手に別のテーブルに記録されている値が入った状態で出てきてしまうのです。

IPアドレスを記録してあるカラムの値にはドットが入っているためか、
上には該当せず、NULLはちゃんとNULLとして返ってきます。
他にも、数字以外の文字列を含むカラムのデータはすべて正常に動いています。


いろいろ調べている最中ですが、
phpMyAdminで上記のSQLクエリを実行しても同じ結果が得られたため、
テーブルの使い方が悪いのかクエリに何か足りないのかだと思います。
しかしまだ原因が特定できないので、ご助力いただきたいのです。

よろしくお願いします。


環境は、
MySQL: 5.1.34
文字セット: UTF-8 unicode
照合順序セット: utf8_general_ci
PHP: 5.2.9

投稿日時 - 2009-07-09 16:19:16

QNo.5111662

困ってます

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

テーブルAとBの結合処理がされていませんね
AとBがどんな関係にある(リレーション)のか等を明記してあげればいいと思います。
このままだと AとBの組み合わせ全パターンが出てしまいます。
AとBでキーになるものを設定してあげて
select * from テーブルA, テーブルB where テーブルA.キー = テーブルB.キー
といった具合に・・・

またテーブル結合のSelectは*を使うとデータが重くなってしまうので
使うカラムだけを指定してあげるといいでしょう

投稿日時 - 2009-07-09 17:11:14

お礼

早い回答ありがとうございます。

上のようにした理由は、
管理ページを作製する中でトップページに表示する際、
使用されるすべてのデータベース、テーブルから全データを単に羅列したかったからです。
しかしJOINやご指摘のものを使っても、ひとつのテーブルを基準に抽出しているところから
狙いとは違った動きになってしまします。


調べてまわりましたが、端から目的がズレていたのかも知れません。
複数回に分けてテーブルから抽出、書き込まれた順に並び替えることを少し考えようかなと思います。

ありがとうございました。

投稿日時 - 2009-07-09 19:50:27

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問