• 締切済み

SELECT * FROM tbl WHERE a = ?;

SELECT * FROM tbl WHERE a = ?; 上記のSQL文で、?の部分がnullだとWHERE条件を無い状態に(SELECT * FROM tbl) のようにするにはどうすればいいでしょうか?

noname#119939
noname#119939

みんなの回答

回答No.1

SELECT * FROM tbl WHERE (a = ?) or (? is NULL)

noname#119939
質問者

補足

回答ありがとうございます。 私が説明不足だった為、補足します。 例えば、SELECT * FROM tblからある番号をとる条件で SELECT * FROM tbl WHERE no1 = $x1 OR no2 = $x2 OR no3 = $x3としています。 $x1,$x2,$x3には1やnullという値がきます。 例えば、 $x1 = 1 $x2 = null $x3 = 1 といった値が入った場合、$x1と$x3が1の条件の物だけを 取ってくるにはどうすればいいでしょうか?

関連するQ&A

  • SQLだけでselect結果に定数を加算して別TBLに保存可能?

    SQLだけでselect結果に定数を加算して別TBLに保存可能? 似たようなケースを見つけられず、質問させていただきます。 MYSQL5+PHP5の環境です。 「A_TBL」から特定条件でselectした結果を、「B_TBL」へ追加更新するSQLですが、「B_TBL」への追加時に一律、[gid]に「10」を加算して保存を行いたいのですが、sqlだけで可能でしょうか。 難しいようであれば、PHPで1行づつ処理を考えております。 REPLACE INTO B_TBL(gid,uid) SELECT gid,uid FROM A_TBL WHERE flg != 1; A_TBL、B_TBLのgid、uid共にint項目です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SELECT のWHEREに別のSELECT

    SELECT のWHEREに別のSELECTの結果を当てはめることは可能でしょうか? ただし、引用テーブルは同じテーブルとします。(DDD) 例 SELECT * FROM DDD WHERE B = (SELECT B FROM DDD WHERE C=1) 再起SQLとはまた違うのでしょうか?

  • from...where を from...join..on にするには

    以下のSQL文は from ... where ... で書かれていますが これを from ... join ... on ... で書き直したいのですが可能でしょうか? select X.col1, U.col1 from TABLE_X as X ,TABLE_U as U where U.REC_NO = (select B.REC_NO from TABLE_A as A, TABLE_B as B where A.ITME = B.ITEM and X.DATA = A.DATA fetch first 1 row only ) むずかしくしているのは、fetch first 1 row only なのですが これがないと where句のかっこのなかのselect文は複数の結果を返します しかし、その複数の結果はすべて同じものになることがデータ上保証されています 。 fetch first を除いて select distinct としても同じ結果となりますが パフォーマンスがひどく低下してしまいます。

  • WHEREでヌルをスルーしたい

    いつもお世話になっております。 SQL文のワイルドカードについての質問なのですが、 SELECT 項目1 FROM 表 WHERE 項目1 LIKE '%' というSQLがあったとして、私は項目1のレコードがすべて返されるのかと思いました。 しかしこれだと項目1フィールドにNULLが入っている(何もデータが入っていない)場合、それは除かれてしまうようです。 NULLのレコードも含めてクエリを返してくれるような条件はあるのでしょうか?

  • 多くの選択項目を処理(SELECT)するストアド

    多くの選択項目を処理(SELECT)するストアド とあるデータ検索において、選択項目が10項目以上あり各項目の値をパラメータとして受取り、 該当データを返すストアドを検討しています。 項目が省略された場合は Null値がパラメータとして入ってきて、その項目は条件から除外します。 (全ての項目が省略されたら、全てのレコードが返される)下記の様な方法を考えています・・・ ----------------------------------------------------------------- if @para1 is null  if @para2 is null   if @para3 is null    select * from TBL   else    select * from TBL where koumoku3 = @para3  else   if @para3 is null    select * from TBL where koumoku2 = @para2   else    select * from TBL where koumoku2 = @para2 and koumoku3 = @para3 else  if @para2 is null   if @para3 is null    select * from TBL where koumoku1 = @para1   else    select * from TBL where koumoku1 = @para1 and koumoku3 = @para3  else   if @para3 is null    select * from TBL where koumoku1 = @para1 and koumoku2 = @para2   else    select * from TBL where koumoku1 = @para1 and koumoku2 = @para2 and koumoku3 = @para3 ------------------------------------------------------ 三つでも面倒なのに10項目以上では考えられません。 こんな時どのように作り込めばいいのでしょうか 動的ストアドにして where文自体を編集した物を渡す事も考えましたが、 エクセル出力時のパラメーター長の制限(?)で断念しました。 省略されなかった項目だけでデータを選択したいような事は多々あると思うのですが、 そんな時のオーソドックスは方法はどんな方法なんでしょうか? よろしくお願いします。

  • SELECT * FROM セレクト文の解釈

    SQL文について SELECT CustomerID, CompanyName FROM Customers セレクト文なのですがセレクトは その名の通り「選ぶ」という意味で fromは「から」という意味だと思うのですが select * from は「~から選んだ」みたいな解釈で良いのでしょうか? SQL初心者です。

  • ACCESSのSQLの書き方

    ACCESSでのSQL文の書き方を教えてください。 テーブルtbl_Aとテーブルtbl_Bがあり, tbl_Aで得られた数値とtbl_Bで得られた数値を加えたものを結果として表示します。 どう書けばよろしいのでしょうか。どうしてもエラーになってしまいます。 イメージとしてはこんな感じです。 select (select ~~ from tbl_A where ~~)+(select ~~ from tbl_B where ~~) (もしoracleならば,「from dual」というのを最後に付けるんですが。)

  • selectで特定の列をwhereで指定するとエラーになる

    今MYSQLのselect文でエラーが出ていて、where でgroupを指定するとエラーが出ます。どこかの書き方が間違っているようなのですが、正しい書式を教えていただけないでしょうか? 色々と実験してみて同じ書き方でほかの列を検索したときは検索が出来ることがわかったので、どこを直していいのかわからない状態です。 環境はWinXP Home SP2 MySQL 5.0.27-community-nt です。 操作しているテーブルは以下の通りで、IDやscodeを検索しようとすると正常に表示されます。 CREATE TABLE `product` ( `ID` int(11) default NULL, `id_seq` int(11) default NULL, `scode` varchar(50) default NULL, `rec_ctl` varchar(10) default NULL, `dir` varchar(100) default NULL, `image` varchar(100) default NULL, `image_s` varchar(100) default NULL, `brand` varchar(100) default NULL, `goods` varchar(100) default NULL, `group` varchar(50) default NULL ); 実行したSQL文と結果です。 mysql> select * from product where group = 'a'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group = 'a'' at line 1 IDなどであれば検索が出来ます。 mysql> select * from product where id = 'a'; Empty set (0.00 sec) それではよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • version7,version8 の型の扱い

    PostgreSQL の 7 から8 へマイグレーション作業をしている者です。 int型で not null制約のあるカラム「id」 の値から、''(空)であることを判定する時、 version7 では、 $sql = "select * from tbl_name where id <> ''"; のSQL文で動いていたようですが、 version8 では、 型の扱いが厳しくなった訳か、syntax error となります。 この場合version8 では、 $sql = "select * from tbl_name where id <> 0"; が、 ''(空)であることを判定するSQL文と考えてよいでしょうか? ご教授よろしくお願いします。

  • 副問い合わせで複数の列を返す

    こんにちは、Makotoと申します。 SQLの副問い合わせで質問があるのですが、 現在のSQLは CREATE OR REPLACE VIEW VIWTEST AS SELECT KOMOKU1, KOMOKU2 (SELECT SUM(KOMOKU3) FROM TBL WHERE A = 1 (SELECT SUM(KOMOKU4) FROM TBL WHERE A = 1 (SELECT SUM(KOMOKU5) FROM TBL WHERE A = 1 FROM M_TBL; という感じのSQLなのですが、副問い合わせの所 が見ているテーブルも条件も一緒なので1つにまとめたいのですが、うまくいきません。CURSORという関数があったのですが、VIEWでは使用できませんでした。なにかよい方法はないでしょうか? 開発環境は oracle 9i(AIX) pro*C/C++ でおこなっています。