• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【SQL】異なる行とのデータ結合)

【SQL】異なる行とのデータ結合

このQ&Aのポイント
  • MySQL5.5.40のテーブル「couple」について、異なる行とデータを結合する方法を教えてください。
  • 要求される出力は「id, couple_id, name, sex, age, (同じcouple_idの)id, name, sex, age」です。
  • エラー考慮は不要で、同じcouple_idは2人しかいないという前提で構いません。

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

  • ベストアンサー
回答No.1

【自己結合】 http://www.dbonline.jp/mysql/select/index17.html SELECT alias1.col_name, ...   FROM tbl_name1 AS alias1   INNER JOIN tbl_name2 AS alias2   ON alias1.col_name1 = alias2.col_name2; (上記「DBOnline」より) この例文に従えば・・・。 SELECT couple_1.id, couple_1.couple_id, couple_1.name, couple_1.sex, couple_2.name, couple_2.sex FROM couple AS couple_1 LEFT JOIN couple AS couple_2 ON couple_1.couple_id=couple_2.couple_id; というSQL文が書けます。だが、これはゴールのそれではありません。 WHERE couple_1.id<>couple_2.id; この Where節を加えて完成。 PS1、MySQLではテストしてませんが、多分OKかと・・・。 MySQL環境は、電源オフのノートブックにしかありません。起動してテストするのが面倒臭かったので悪しからず。 PS2、エイリアス文( AS couple_1)は書かなくてもOKかも・・・。 まあ、自己結合であることを明示的に書くかどうか?それだけの問題です。

opaopaman
質問者

お礼

f_a_007様 ありがとうございます!! 上手く出力できました。 感謝感謝

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 基本的なSQL文

    とても基本的なことだと思うのですが、以下のようなテーブルがあるとします。 create table test ( id numeric primary key, name varchar(45), age numeric ); これに例えば以下のようにデータを詰めたとします。 +----+----------+------+ | id | name | age | +----+----------+------+ | 1 | takeshi1 | 50 | | 2 | takeshi2 | 25 | | 3 | takeshi3 | 30 | | 4 | takeshi4 | 35 | | 5 | takeshi5 | 40 | | 6 | takeshi6 | 45 | +----+----------+------+ ここで最年少のレコードを取り出したいだけなのですが mysql> select id, name, min(age) from test;とすると +----+---------+----------+ | id | name | min(age) | +----+---------+----------+ | 1 | takeshi1| 25 | +----+---------+----------+ 年は最年少が取り出されますがidとnameは一行目が取り出されているようです。どのようなSQLを書けば以下のようになるのでしょうか。 +----+---------+----------+ | id | name | min(age) | +----+---------+----------+ | 2 | takeshi2| 25 | +----+---------+----------+

    • ベストアンサー
    • MySQL
  • VBAで2つのデータを横に結合できますか?

    Sheet1には以下のデータが入力されています。 NO TIMES SCORE 1  1  20 1  2  30 1  3  25 2  1  50 2  2  40 2  3  45 3  1  70 3  2  75 4  3  3 いっぽうsheet2には以下のデータが入力されています。 NO  NAME  SEX  AGE 1  Aさん  男  31 2  Bさん  女  27 3  Cさん  女  33 4  Dさん  男  26 この2つのデータをNOをキーとして横に結合したいのですが VBAでこのような結合操作はできるものでしょうか? NO NAME SEX AGE TIMES SCORE 1 Aさん 男 31 1 20 1 Aさん 男 31 2 30 1 Aさん 男 31 3 25 2 Bさん 女 27 1 50 2 Bさん 女 27 2 40 2 Bさん 女 27 3 45 3 Cさん 女 33 1 70 3 Cさん 女 33 2 75 4 Dさん 男 26 3 3 if文を使ってNOが1ならNAMEがAさん、SEXが男・・・という 条件文をかけばできないこともありませんが、 実際のデータではNOが450もありますので 非効率と考えています。 もしご存知でしたら教えていただけませんか。 よろしくお願いいたします。

  • 集計を求めるSQL文について

    こんにちは。 はじめまして、MMM-SRVと申します。 初めて投稿させて頂きます。 宜しくお願い致します。 MS Access2000をデータベースとしてASPでプログラムを組んでおります。 その中でどうしてもわからないので教えて下さい。 create table t1 ( age varchar(30), -- 年代 sex varchar(30), -- 性別(男'0'女'1') txt varchar(30) -- 氏名 ); というテーブルに age | sex | txt ----+-----+------   1 | 0  | A   2 | 0  | B   2 | 1  | C   1 | 1  | D   2 | 0  | E というデータがあるとして、ここから age | 男 | 女 ----+----+----   1 | 1  | 1   2 | 2  | 1 のように集計するSQL文をご教授頂けませんでしょうか。 postgrsであれば、以下のように組んでみるのですが case演算子がMS Accessでは使えないようなので…。 select age,sum(case when sex=0 then 1 else 0 end) as 男,sum(case when sex=1 then 1 else 0 end) as 女 from t1 group by age; 宜しくお願い致します。

  • mysql_fetch_arrayとテンプレートの使い方

    データベースからランダムに取り出した3つのデータがあります。 取り出したデータにはそれぞれid、name、ageのデータが入っています。 $rs = mysql_query("select * FROM table order by Rand() LIMIT 0,3;",$con); while($rec = mysql_fetch_array($rs, MYSQL_ASSOC)){ $tpl->assign(array( id => $rec[id], name => $rec['name'], age => $rec[age] )); } これだと1種類のデータが3つ連続して表示されてしまいました。 3種類のデータを全部表示するにはどのようにしたらよいのでしょうか? テンプレート(?)の使い方がよく分かっていないので検討違いのことをしている気がしますがよろしくお願いします。

    • ベストアンサー
    • MySQL
  • 表結合の処理速度(負荷)

    ご覧頂きありがとうございます。 今回の質問ですが、MySQLの表結合時の処理速度(負荷)についてお聞きします。 SELECT abcd.name, hoge.age FROM abdc, hoge WHERE abcd.id = hoge.id; SELECT abcd.name, hoge.age FROM abcd LEFT JOIN hoge ON abcd.id = hoge.id; 上記のいわゆるJOINとJOIN(省略)?になりますが、どちらが処理速度的に優秀なのでしょうか? 可能であればどういった処理が走っているのかも御存じであれば教えて頂きたいです。 参考URLでも構いませんので、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • SQL MIN句

    テーブルには複数の主キーがあり、そのうちの3つの主キーを元に 最も古い日付の情報を取得したいです。 同じデータが複数あるので、副問い合わせ(=)でエラーになると思ったのですが エラーにならずにすべてのデータが取得されてしまいます。 テーブル id name sex date1 1 'A' '男' 20120101 1 'A' '男' 20120101 2 'A' '女' 20120102 select * from table where date1 = (select min(date1) from table where id = 1 and name = 'A' and sex='男'); 下記のような情報を取得するには、SQLとして間違えておりますでしょうか。 ↓ id name sex date1 1 'A' '男' 20120101 1 'A' '男' 20120101 お分かりの方、ご教授頂けませんでしょうか。 以上、よろしくお願い致します。

  • PHP pdo データが無い場合とある場合

    tablename( id int not null, name text not null, age int ); 的なテーブルがあったとして、id番号と名前は必ずデータがあるが、年齢はデータがあったり無かったりするとします。 $id = 1; $name = "太郎"; $age = ""; だったり $age = "25";だったり シンプルにinsert 書きたいのですが、やはり$ageが空文字の場合と数字で構成される文字の場合でわけないと書けないでしょうか? $sql = "insert into tablename( id,name,age) values (:id,:name,:age); $stmt = $pdo->prepare($sql); $stmt->bindValue(":id", $id, PDO::PARAM_INT); $stmt->bindValue(":name", null, PDO::PARAM_STR); if ($age === "") { $stmt->bindValue(":age ", null, PDO::PARAM_NULL); } else { $stmt->bindValue(":age ", $age , PDO::PARAM_INT); } とわけないと無理?

    • 締切済み
    • PHP
  • 同テーブルで指定カラム値を相互更新(入替)したい

    下記のようなカラムがある時、DBから取得した値を、引数(並べ替え順)に応じて、(同じカラムを)更新するSQL文を教えてください ●カラム id1 sex1 age1 id2 sex2 age2 id3 sex3 age3 id4 sex4 age4  ●引数例 3 1 2 ※1番目が3、2番目が1、3番目が2 ・「1の数字が付いたカラムの値」を、「3の数字が付いたカラムの値」で更新したい ・「2の数字が付いたカラムの値」を、「1の数字が付いたカラムの値」で更新したい ●質問 ・MySQLだけで処理可能でしょうか? UPDATE テーブル名 SET id1=(SELECT id3 FROM テーブル名 WHERE id1=id3値),sex2=(SELECT sex3 ……; ・それとも、一度、全ての値を取得して、PHP等で処理するのでしょうか? UPDATE テーブル名 SET id1=id3値,sex1=sex3値,age1=age3値,id2=id1値 ……; ・他に何か良い方法はあるでしょうか(一旦別テーブル作成後、戻す等) ●環境 MySQL5.1

    • ベストアンサー
    • MySQL
  • PHP,MYSQLで特定例を表示する場合、

    PHP、MYSQLで特定例を表示する場合のsql文が分かりません。 データーベースmeibo no | name | sex | age | 1 | 一郎 | 男 | 20 | 2 | 一子 | 女 | 22 | 3 | 二郎 | 男 | 25 | 4 | 二子 | 女 | 27 | 女のみを表示したい場合を考え以下のようなコードを作りましたが上手くいきません。 <?php //データーベース接続 require_once('../require/dbcon.php'); //件数の表示 $recordSet = mysql_query('SELECT COUNT(sex) AS record_count FROM meibo WHERE sex(女)'); $data = mysql_fetch_assoc($recordSet); echo '<b>','※ 女性メンバー','</b> ('.$data['record_count'].' 人のデーターがあります。)<br /><br />'; //テーブルセット $recordSet = mysql_query('SELECT sex FROM meibo WHERE sex(女)'); while ($table = mysql_fetch_assoc($recordSet)) { echo $table['no']; echo $table['name']; echo $table['age']; } エラーでは $data = mysql_fetch_assoc($recordSet); と、 while ($table = mysql_fetch_assoc($recordSet)) のラインが出るのですが 何が悪いのか良く分かりません。 私の考えではsql文が悪いのではないかと思うのですが、どなたかお教えくださいませ。

    • ベストアンサー
    • PHP
  • php+MySQLでレコードが何行目かを知るには

    お世話になります。 php+MySQLの環境でレコードが何行目になるかを 知る方法を教えてください。 まず下記のようなテーブルがあるとします。 |  id  |  name  | -------------------- |  1 |  山田  | |  2 |  田中  | |  3 |  中村  | |  5 |  山本  | idはAutoIncrementで振っています。 nameは重複することはありません。 レコードは更新状況により削除されることがあるため、 idは必ずしも連番になっているわけではありません。 このような状況で上のテーブルの「山本」を ORDER BY id ASC で取得する際に「山本は4行目である」 ということがわかる方法を教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL

専門家に質問してみよう