• ベストアンサー

MySQL5でキーがないテーブルの結合はできますか?

MySQL5なのでサブクエリが使えるのですが、 A x Bのレコードを返したいのですがSQLで可能でしょうか? ■テーブルA a_id b_id 1 1 1 2 ■テーブルB c_id 1 2 ■期待する結果 a_id b_id c_id 1 1 1 1 2 2

  • php4
  • お礼率42% (373/888)
  • MySQL
  • 回答数2
  • ありがとう数2

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

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

#1です。 リレーショナルDBの世界では、「A × B」は「直積」という意味で使うことがあります。 これはテーブルAとテーブルBの結合を、すべての組み合わせで行なう意味であり、テーブルA、テーブルBにそれぞれ2行存在するなら、結果は4行になります。結合条件を指定せずにジョインを行なえば、直積することになります。

php4
質問者

お礼

4年くらい前に、聞いた直積の意味がやっとわかりました。 結合条件を指定せずにジョインを行い希望の事が実現できました。 ありがとうございます。

その他の回答 (1)

回答No.1

>MySQL5なのでサブクエリが使えるのですが、 >A x Bのレコードを返したいのですがSQLで可能でしょうか? 「A x B」とはどういう意味で、サブクエリとどういう関連があるのでしょうか? 提示された例だけなら、 select * from テーブルA,テーブルB where b_id=c_id で、できてしまいます。 質問のタイトル、前文と、内容が一致していないように感じますが?

php4
質問者

お礼

つっこみありがとうございます。 確かにサブクエリーとは何の関係なかったです(^^;) すみません。 直積のSQL自体、4年も遭遇していなかったので、 とんちんかんな内容を書いてしまいました(汗)

関連するQ&A

  • テーブル結合

    度々お世話になっています。 Mysqlのテーブル結合したいと思ってます。 テーブル構成は以下のとおりですのでご参照ください。 ■テーブルA id | name 1 | bind 2 | samba 3 | apache ■テーブルB id | detail 3 | test 3 | test 1 | test ■結合結果 id | count 1 | 1 2 | 0 3 | 2 テーブルA,Bはidコラムで紐づいています。 この際、テーブルBのidごとにレコード数を出力したいのですが、 どういったSQLを流せば良いでしょうか。 ご教示願います。

    • ベストアンサー
    • MySQL
  • MySQLで別テーブルを参照し、レコードを消したい

    お世話になります。MySQL4のデータベース上に2つのテーブルがあるのですが、 片方のテーブル(a)にあるフィールド(b_id)の値を参照し、もう片方のテーブル(b)のレコードを消していきたいのです。 具体的には以下のようなテーブル(a)とテーブル(b)があります。 TBL: a =========================== id    b_id    category =========================== 0     1       3 --------------------------- 1     2       1 --------------------------- 2     3       2 --------------------------- 3     4       2 --------------------------- TBL: b =========================== id    name    price =========================== 0    goodsA   1,000 --------------------------- 1    goodsB   500 --------------------------- 2    goodsC   250 --------------------------- 3    goodsD   2,500 --------------------------- 4    goodsE    1,800 --------------------------- やりたいことは、テーブル(a)の「category」フィールドが「2」以外であれば、 そのレコードの「b_id」にある数値を「id」にもつ、テーブル(b)のレコードを消していきたいのです。 上記の例だと、テーブル(a)のid「0」と「1」がcategoryに「2」以外を持っています。 この2つのレコードのb_idは「1」と「2」ですので、テーブル(b)のid「1」と「2」を消したいと思っています。 SQLについて知識がなく、困っています。どなたかご存知の方がいらっしゃいましたら、お知恵をお貸しください。 よろしくお願いします。

  • 2つのテーブルでの合計取得

    環境:Mysql4.1.19 次のようなAテーブルとBテーブルのキーごとのレコードカウントを取得したいのですが、どのようなSQL文を作ればよいのでしょうか? Aテーブル ID Hiduke 005 2006-10-1 006 2006-10-3 001 2006-10-1 005 2006-10-6 005 2006-10-1 Bテーブル ID Hiduke 006 2006-11-1 006 2006-11-3 001 2006-11-1 003 2006-11-6 005 2006-11-1 から、次のような結果を得たい。 005 4 006 3 001 2 003 1 以上です。初心者ですが、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • テーブルを結合

    テーブルの結合に関して質問します。 ネットなどでinner joinを使った複数のテーブル結合が参考として 書いてあったのですが(3つまで), 4つテーブルを結合する事は 出来るのでしょうか? A,B,CテーブルにはID,NAMEがあります。 DテーブルにはA,B,CテーブルのIDがあります。 参考サイトを見て3つのテーブルを結合するSQLが以下になります。 SELECT a.name, b.name, c.name FROM a INNER JOIN (b INNER JOIN c ON b.id = c.id) ON a.id = c.id よろしければアドバイスお願いします。

  • サブクエリなしで2つのテーブルを集計する方法

    テーブルA id|cnt|name 1 2 田中さん 2 5 鈴木さん テーブルB id|cnt|name 1 4 田中さん 2 4 鈴木さん サブクエリを使用せず、上記2つのテーブルを集計し、 下記のように出力できるSQLはありますでしょうか? ■期待する総合ランキング結果 id|cnt|name 2 9 鈴木さん 1 4 田中さん P.S まだまだ、安価なレンタルサーバはMySQLは4.0が多く苦労します・・

    • ベストアンサー
    • MySQL
  • 複数テーブルの結合

    テーブルA  a_id id a_data a_date ----------- テーブルB id b_data b_date テーブルC id c_data c_date ----------- テーブルAとテーブルBは「id」がキーで1:N(Nは0も含む) テーブルAとテーブルCは「id」がキーで1:N(Nは0も含む) このような3のテーブルで a_idを検索キーにして次のフィールドのデータを抽出したいのですが。。。 ※テーブルCのc_dateを降順で先頭の1レコードのみ ※テーブルBのidをカウントする selectの結果(イメージ) id a_data a_date count(B.id) c_date ------------------------------------- 001 AAAA 2007/02/01 20 2007/02/14 005 BBBB 2007/02/02 0 2007/02/10 006 CCCC 2007/02/02 0 2007/01/08 003 DDDD 2007/02/01 100 002 EEEE 2007/02/01 9 004 FFFF 2007/02/01 0 よろしくお願いします

  • 複数テーブルの結合

    マスターテーブル1つと、子テーブルが複数存在して子テーブルにはマスターテーブルのidを格納するフィールドがあり参照しなくなったときにはそのidを消去するといったデータベースがあったときにマスターIDごとに子テーブルのどれか1つでも参照していればカウントするみたいなSQLをつくりたいんですが select count(m.id) from master m inner join a on m.id = a.m_id inner join b on m.id = b.m_id inner join c on m.id = c.m_id group by m.id みたいなSQLだとAにデータが存在しなければB以降に存在しても期待した結果が出力されません。A、B、Cいずれかのm_idとマスター側のIDが等しければカウントするという出力をするためにはどのように書けばいいんでしょうか。 わかりづらい説明で申し訳ありませんがよろしくお願いします。

    • ベストアンサー
    • MySQL
  • 2つのテーブル結合

    Oracle10g使用しています。 テーブルAとテーブルBを結合させてデータを取得したいと思っています。 [テーブルA] ID name 1 A 2 B 3 C 4 D [テーブルB] ID SEQ VALUE 1 1 111 2 1 222 2 2 333 3 1 444 4 1 555 4 2 666 4 3 777 テーブルAのキーは[ID]、テーブルBのキーは[ID,SEQ]です。 この二つを連結して以下のように出力したいと思っています。 ID SEQ NAME VALUE 1 1 A 111 2 2 B 333 3 1 C 444 4 3 D 777 テーブルBのデータは同じIDのうち最大のSEQのものを取得したいのですが よいSQLが思いつきません。 よい方法があればご教授ください。 よろしくお願いいたします。

  • 同一テーブルのカラムの結合による取得

    列A 列B 列C 111 AAA PPP 222 AAA QQQ 333 AAA null 444 AAA null と言うテーブルがあるとして、 列Cがnullのレコードとnullでないレコードを列Bで ジョインし、下記のような結果を取得したいです。 列A 列C 333 PPP 333 QQQ 444 PPP 444 QQQ 今は SELECT X.列A ,Y.列C FROM table X ,table Y WHERE X.列B = Y.列B AND X.列C IS NULL AND Y.列C IS NOT NULL で取得しています。 この同じテーブルであるtableを二つ使わずに 同様の結果を取得するSQLはありますでしょうか。

  • テーブルの結合について

    うまく動作しなくて、困っております。 MySQLを利用しており、その際のテーブルの結合で困っています。 table a +-+--+ |id|col| +-+--+ | 1|A| | 2|B| | 3|C| | 4|D| | 5|E| +-+--+ table b +-+--+ |id|col| +-+--+ | 2|G| | 5|G| | 6|G| +-+--+ 上記テーブルを結合し、下記のようにしたいのですが・・・。 +-+--+ |id|col| +-+--+ | 1|A| | 2|B| | 3|C| | 4|D| | 5|E| | 6|G| +-+--+ 参考書・Webから探してみましたが、 見つかりませんでした。 よろしくお願い致します。