• 締切済み

ある条件のデータを取り出したいのに...

ある一部の条件に沿ったデータを取り出したのですが、取り出す事ができません。 DB設計自体を変更しなくてはいけないと思ったので相談しました。 下記の条件でできるのかどうかをアドバイス頂けないでしょうか? お願いします。 select * FROM Atable, Btable, Ctable WHERE Atable.group_id = '$GROUP' AND Atable.group_id = Btable.group_id ORDER BY total_day DESC

  • aeic
  • お礼率10% (60/582)

みんなの回答

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.2

こんにちわ。 noopee さんの言われているように、DB の設計や種類が分かりませんので 確実な事は言えませんが、aeic さんの書かれたSQL 文で気になる点が ありましたので、コメントしておきます。 1) データを取り出す表を3つ (Atable, Btable, Ctable) している   にも関わらず、Select * でデータを取り出していますが、   これでエラーは発生していませんか? 2) Atable とBtable はgroup_id でJoin して取り出していますが、   Ctable とのJoin は行われていないようです。   これだと、AtableとBtable の主キーがgroup_id で定義   されていたとしても、Ctable の件数分データが出力   されませんか?

  • noopee
  • ベストアンサー率38% (114/297)
回答No.1

こんにちは。 まず、現在のDB設計・取り出す条件を書かれないと、SQLだけ提示されても何もわかりません。 あと、DBの種類やバージョンによっても異なりますので、詳細情報を出されたほうが、回答いただけると思いますよ。

関連するQ&A

  • ★年度ごとに情報を一覧表示

    各情報を、年度ごとに表示したいと考えています。 基となる年度の条件指定方法が分かりません。 (????と記述しているところです。) 各サブクエリは、年度ごとに情報がない時もあります。 select ????,1tbl.day ,2tbl.day ,3tbl.day from  (select nen,max(day) from 1tbl  where nen < '2006' and nen > '2001'  group by nen  order by nen desc ) 1tbl,  (select nen,max(day) from 2tbl  where nen < '2006' and nen > '2001'  group by nen  order by nen desc ) 2tbl,  (select nen,max(day) from 3tbl  where nen < '2006' and nen > '2001'  group by nen  order by nen desc ) 3tbl where ???? 各サブクエリの情報 1tbl-------2tbl------3tbl------- nen--day----nen--day----nen--day--- 2005-2005/12/12-2005-2005/12/13--------- ---------2004-2004/11/10-2004-2004/12/30 2002-2002/09/01------------------ 表示 nen--1day-----2day-----3day--- 2006-------------------- 2005-2005/12/12--2005/12/13------- 2004--------2004/11/10--2004/12/30 2003-------------------- 2002-2002/09/01-------------- 2001-------------------- ↑上記のように表示したいと考えています。 この形で取れるSQLの書き方はあるでしょうか。 (2006年や2003年のように、情報が0件のところは取れなくてもいいです。) サブクエリ部分をばらばらでSQL発行すれば済む話なのですが、 一度に取れる方法は無いのか気になりまして。 (年度のみのテーブルはありません。) よろしくお願いします。

  • このようなDELETEはできますか?

    こんにちは。DELETE文の削除条件について教えてください。 例えば下記のような2つのテーブルがあったとします。 ATABLE KEY1(ID) KEY2(DATE) ・・・・・・・・・・ ------------------------------------------------ 100000 2004/09/01 ・・・・・・・・・・ 200000 2004/09/01 ・・・・・・・・・・ 300000 2004/09/01 ・・・・・・・・・・ BTABLE KEY1(ID) KEY2(DATE) CODE ・・・・・・・・・・ ------------------------------------------------ 100000 2004/09/01 0 ・・・・・・・・・・ 200000 2004/09/01 0 ・・・・・・・・・・ 300000 2004/09/01 1 ・・・・・・・・・・ この2つのテーブルで、BTABLEのCODEが1のレコードにKEYで関連付くATABLEのレコードを削除したいのです。 プログラムの中では対応できるのですが、SQL1文で実行させることはできるでしょうか? とりあえず下記のように作ってみました(いたずらに長いかもしれませんが)。 DELETE FROM ATABLE WHERE KEY1 IN (SELECT ATABLE.KEY1 FROM ATABLE,BTABLE WHERE ATABLE.KEY1 = BTABLE.KEY1 AND ATABLE.KEY2 = BTABLE.KEY2 AND BTABLE.CODE = 1) AND KEY2 IN (SELECT ATABLE.KEY2 FROM ATABLE,BTABLE WHERE ATABLE.KEY1 = BTABLE.KEY1 AND ATABLE.KEY2 = BTABLE.KEY2 AND BTABLE.CODE = 1) これで良い/悪い、もっと簡潔にできる、などありましたら是非お聞かせ願えますでしょうか? よろしくお願いします。

  • 秀丸でSQLを書く際に SQLの予約語だけ大文字

    秀丸でSQLを書く際に SQLの予約語だけを、大文字に変換するよい方法は? たとえば select * from table_1 where id=1 order by id desc; と書いて、マクロを起動すると SELECT * FROM talbe_1 WHERE id=1 ORDER BY id DESC; となるようにするよい方法はありませんか? また、予約語が「強調」されると尚良いです。

  • ★Mysql 同じ条件で●●から同じ数だけ抽出!

    SELECT * FROM `table` WHERE `abc`=1 and `def`=3 and GROUP BY ●● order by rand(); この条件なら、●●が1件ずつ計30件が抽出されます。 が、 私がやりたいのは、●●から3件ずつで、 3×30=90件 抽出したいです。 一文でできるのでしょうか? 初心者ですみません。 よろしくお願いします。

  • mysql内データ検索結果の表示順について

    mysql内のデータを条件検索する時、検索結果の表示順を指定します。 新着順(id降順)で指定する場合のエラーについてアドバイスをいただけないでしょうか。 例えば、DB内データを降順で全件表示する場合は、 $query = "SELECT * FROM テーブル名 ORDER BY id DESC"; とすることでできると思います。 そこで、条件検索で結果表示をする場合は、上記の通りにしてもエラーが発生します。これについてのコードは以下のような感じです。 $query = "SELECT * FROM テーブル名 ORDER BY id DESC"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where); } これは、ORDER BY id DESCを書く位置が悪いのでしょうか? order by句は$query = select ~~~のあとに付けるという認識だったのですが、場合によって間違いとなるということなのでしょうか。 アドバイスをいただければ幸いです。

    • 締切済み
    • PHP
  • 特定のデータの前後を取得したい

    以下のようなテーブルがあり、 SELECT id , regist_date FROM table_name ORDER BY regist_date DESC; ↑このSQLで並べると↓以下になるとします。 id(int型)   regist_date(datetime型) 12      2017-03-30 08:05:03 95      2017-03-29 19:05:03 72      2017-03-28 12:05:03 15      2017-03-28 12:05:03 62      2017-03-27 15:05:03 94      2017-03-26 12:05:03 やりたい事はidが72というのが分かっており、 そのデータと前後のデータを取得したいです。 ※日付の部分が完全に重複するデータが存在する場合もあります。 ※idは重複しません。 ↓このデータがとりたいです。 95      2017-03-29 19:05:03 72      2017-03-28 12:05:03 15      2017-03-28 12:05:03 SELECT * FROM table_name WHERE id = 72 ORDER BY regist_date DESC; ここから先が分からなくなってしまいどなたかわかる方いらっしゃいますか?

    • ベストアンサー
    • MySQL
  • 重複データからの取得方法を教えてください

    id s_no s_name ---------------- 1 001 aaaa 2 005 bbb1 3 005 bbb2 4 002 cccc 5 005 bbb3 6 005 bbb4 上のものがテーブルの内容です。取得したい結果が ---------------- 1 001 aaaa 4 002 cccc 5 005 bbb3 です。 試したSQLは select distinkd on (s_no) id,s_name from shain where id>=5 order by id desc select id,s_no,s_name from shain where id>=5 group by s_no order by id desc などです。 データベースがmdbなのでdistinkd onは使えませんでした。 もしかすると書式が違うのでしょうか?

  • SQL count 別名を条件に使用

    いつもお世話になっております。 標題についてご教授頂きたく質問させて頂きました。 [SQL} select A, B, count(*) as cnt from product where A=1 and cnt > 2 group by A order by cnt desc とこのようにSQLを記述して実行したのですが、 cnt>2でエラーが出ます。 order by には count の別名を使用できるのですが、 where句やHAVINGでは使えません。 この場合 cont(*)>2 またはcount(項目名)>2 としなければならないのでしょうか

  • MYSQLでの条件検索ORを使って・・・

    MYSQLを使って、条件つきの検索をしたいのですが、下記のSELECT文を使って、検索をしています。 下記のser_table.group_idが01のものと、04のものを両方とってきたいのですが、うまくできないので、教えていただけないでしょうか? $STRSQL=qq{SELECT }; $STRSQL=$STRSQL.qq{awaytable.iput_charg_id, awaytable.number, awaytable.total_day, awaytable.news_comp, awaytable.news_title, awaytable.news_content, awaytable.URL_news, awaytable.news_gif }; $STRSQL=$STRSQL.qq{FROM awaytable, ser_table }; $STRSQL=$STRSQL.qq{WHERE ser_table.iput_charg_id = awaytable.iput_charg_id }; $STRSQL=$STRSQL.qq{AND ser_table.iput_charg_id <> '995' }; $STRSQL=$STRSQL.qq{AND ser_table.group_id = '04' }; $STRSQL=$STRSQL.qq{AND ser_table.group_id = '01' }; $STRSQL=$STRSQL.qq{ORDER BY awaytable.total_day DESC }; $STRSQL=$STRSQL.qq{LIMIT $pos,$pagesize };

  • クエリの遅さの原因

    下記のクエリーをそれぞれ試してみたところ、圧倒的に下の方が遅くなってしまいました。 $rs = mysql_query("select * from A INNER JOIN B ON B.cat = A.id order by B.id desc LIMIT 1, 10 ;",$con); $rs = mysql_query("select * from A INNER JOIN B ON B.cat = A.id where B.name is not null group by B.area order by B.id desc LIMIT 1, 10 ;",$con); where B.name is not null group by B.area この処理はそれほど負荷が掛かってしまうのでしょうか。 他に良い書き方(方法)がありましたら教えてください。

    • ベストアンサー
    • MySQL