- ベストアンサー
MySQL5でキーがないテーブルの結合はできますか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 リレーショナルDBの世界では、「A × B」は「直積」という意味で使うことがあります。 これはテーブルAとテーブルBの結合を、すべての組み合わせで行なう意味であり、テーブルA、テーブルBにそれぞれ2行存在するなら、結果は4行になります。結合条件を指定せずにジョインを行なえば、直積することになります。
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
>MySQL5なのでサブクエリが使えるのですが、 >A x Bのレコードを返したいのですがSQLで可能でしょうか? 「A x B」とはどういう意味で、サブクエリとどういう関連があるのでしょうか? 提示された例だけなら、 select * from テーブルA,テーブルB where b_id=c_id で、できてしまいます。 質問のタイトル、前文と、内容が一致していないように感じますが?
お礼
つっこみありがとうございます。 確かにサブクエリーとは何の関係なかったです(^^;) すみません。 直積のSQL自体、4年も遭遇していなかったので、 とんちんかんな内容を書いてしまいました(汗)
関連するQ&A
- 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について知識がなく、困っています。どなたかご存知の方がいらっしゃいましたら、お知恵をお貸しください。 よろしくお願いします。
- 締切済み
- MySQL
- 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 よろしければアドバイスお願いします。
- ベストアンサー
- Oracle
- サブクエリなしで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 よろしくお願いします
- 締切済み
- MySQL
- 複数テーブルの結合
マスターテーブル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が思いつきません。 よい方法があればご教授ください。 よろしくお願いいたします。
- ベストアンサー
- Oracle
- 同一テーブルのカラムの結合による取得
列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はありますでしょうか。
- ベストアンサー
- Oracle
- テーブルの結合について
うまく動作しなくて、困っております。 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から探してみましたが、 見つかりませんでした。 よろしくお願い致します。
- ベストアンサー
- その他(データベース)
お礼
4年くらい前に、聞いた直積の意味がやっとわかりました。 結合条件を指定せずにジョインを行い希望の事が実現できました。 ありがとうございます。