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

解決済みの質問

複数のtable

mysqlとperlを勉強中です

2つのテーブルから同じIDの情報を取得したいです。

hoge1テーブルとhoge2テーブルのIDは共通で一致しています。
(実際にはフィールドはもっと多いですがわかりやすくしています)

hoge1テーブルは3つフィールドがあります
ID INT1 INT2

hoge2テーブルは3つフィールドがあります
ID TEXT1 TEXT2

hoge1テーブルで取得するのは数字が一致したIDです
SELECT id FROM hoge1 WHERE int1=10 or int2=10 ORDER BY id

hoge2テーブルで取得したいのはhoge1テーブルで取得したIDのTEXTです。やりたいことはこんな感じです
SELECT TEXT1,TEXT2 FROM hoge2 WHERE id=hoge1テーブルで取得したID ORDER BY id;

while (my $rec = $sth->fetchrow_array) {
push(@recs, $rec);
}

perlでは配列で取得して後で、foreachで100個ほどprintしています。


hoge2も同じように取得したいのですが、hoge2はフォームを空白で送信できるようになっているので値がなにもないときがあります
配列に入れてしまうと空白のレコードがあるとその分、配列がずれてしまいます
hoge1テーブルで取得したIDとhoge2テーブルで取得したテキストのIDを一致させる方法はありますか?

やりたいのはこうゆうことです。
テーブル1で値が一致しているIDを取得する
テーブル2でテーブル1で一致したIDのテキストを取得する

リレーションも考えましたが素人なのでピンときませんでした
テキストのほうも配列で取得して100個ほどprintしたいのです

よろしくお願いします

投稿日時 - 2013-05-07 19:30:58

QNo.8077330

暇なときに回答ください

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

いまいち状況がわからないのですが

不通にjoinしたり
SELECT TEXT1,TEXT2 FROM hoge2 inner join hoge1 on hoge1.ID=hoge2.ID and (`INT1`=10 or `INT2`=10);

サブクエリ使ったりしてみては?
SELECT TEXT1,TEXT2 FROM hoge2 WHERE ID in (SELECT ID FROM hoge1 WHERE `INT1`=10 or `INT2`=10)

投稿日時 - 2013-05-07 20:04:31

お礼

わかりにくくてすいません
2つのテーブルは登録者の数値と、テキストを分離したテーブルです
よって、カラムの数は一致します。数値を取得したときに、それと同じカラムのテキストを取得しようとしています(テキストに値がない場合も)

テキストを配列に取得する方法ってありますか?(空の値を含めて)

数値とテキストは同じid、左から数えた順序が同じカラムです

perlで表示する時は、こんな感じで使いたいのです。テキストには空の値があります

$hoge1[0]数値 $hoge2[0]テキスト
$hoge1[1]数値 $hoge2[1]テキスト
$hoge1[2]数値 $hoge2[2](テキストに値なしの場合、空白で表示)
$hoge1[3]数値 $hoge2[3]テキスト

投稿日時 - 2013-05-08 02:25:01

ANo.1

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

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

回答(3)

ANo.3

select hoge2.* from hoge1,hoge2 where int1=int2 and hoge1.id=hoge2.id

てことかな?

投稿日時 - 2013-05-07 20:38:31

ANo.2

select * from hoge2 where id in (select id from hoge1 where int1 = int2);

これでどうでしょうか?

投稿日時 - 2013-05-07 20:11:59

あなたにオススメの質問