電子書籍の厳選無料作品が豊富!

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したいのです

よろしくお願いします

A 回答 (3件)

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



不通に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)
    • good
    • 0
この回答へのお礼

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

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

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

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

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

お礼日時:2013/05/08 02:25

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



てことかな?
    • good
    • 0

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



これでどうでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!