• ベストアンサー

mysql IN句に1データだけ指定は問題有ですか

IN('xxx','sss',~)と複数データを指定するのがIN句の使い方ですが、 SELECT * FROM `tabledate` WHERE ~ ff IN('xxx') ~; というように1つだけ指定でも問題はありますか?

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

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

databaseソフトのつくりによると思うのではっきり断言する気はないが、 WHERE ~ ff = 'xxx' と書くとインデックスを使った検索になるが、 WHERE ~ ff IN('xxx') と書くとインデックスを使わないかも。 別にインデックスを使わないと極端に遅くなるのでない限り問題じゃないと思うけど。 (inの中が2個以上でも検索しようと考えていると思うので、  インデックスは使わなくても大丈夫と考えていると思うけど。) 多分、inの中を可変にしたいのだが、1個になる場合は大丈夫か心配という質問と思うので、 そういう意味では問題ないと思います。 ## ところで、inの中が0個にはならないつくりにしているかな? ## ・・・プログラム作るときにうっかりはまるパターンなので。(余計なおせっかいと自分でも思う)

juju-juju
質問者

お礼

インデックスが必要になるレベルではないので、あまり気にしていないです。 inの中が0個になるときは、inそのものを作らない形にしています。 いろいろと有難うございます。

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

その他の回答 (1)

  • hogya
  • ベストアンサー率67% (49/73)
回答No.1

動作的には1つだけ指定でも問題はありません。

juju-juju
質問者

お礼

問題はないのですね。有難うございます。

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

関連するQ&A

  • PDO で IN句を利用することができません

    PDOでIN句を使用しているのですが、正しく動作しません。 $stmt = $pdo->prepare('SELECT * FROM hoge where id in (?)'); $stmt->bindValue(1, '123, 456, 789'); $stmt->execute(); var_dump($stmt->fetchAll()); fetchAllを行っても複数のレコードがかえってこず、ヒットした最初の1行のレコードしか取得することができません。PDOでIN句を使用することはできないのでしょうか? DBMSはMySQLを使用して、PHPは5.2.6を使用しています。 ちなみに $stmt = $pdo->prepare('SELECT * FROM hoge where id in (?, ?, ?)'); $stmt->bindValue(1, 123); $stmt->bindValue(2, 456); $stmt->bindValue(3, 789); $stmt->execute(); では、fetchAll で複数のレコードが返ってきます。 どうしてもpreparedで単一のIN句を使いたいのですが、何か良い方法はありますでしょうか?

    • 締切済み
    • PHP
  • where条件内のin句について

    質問です。 where code in(select code from list where ....) ------------------------------------------ といったwhere句がある場合ですが、 in句でヒットしている件数が5000件を超えているため SQLを発行してもタイムアウトでエラーになります。 何か回避策はないでしょうか? よろしくお願いします。

  • ASP.NETのIN句のパラメータについて

    ASP.netでの質問です。データセットを作成し、テーブルアダプタにて メソッドを作成しました。がsqlでIN句でパラメータを指定すると エラーがでます。DBはoracleです。 select * from table where param IN (:param) パラメータは可変長でいくつでるか分かりません。 中の値は(値1,値2,値3)という感じです。 IN句が使えないと他にどうすればよいでしょうか?

  • IN句に副問合わせを使う場合と使わない場合

    お世話になります。 SQLについての質問です。 RDBMSはSymfowareです。 IN句に副問い合わせを指定するSQLと その副問い合わせの結果を直接IN句に記載したSQLで 結果が異なってしまいます。 こういうことってありますでしょうか。 以下のようなSQLです。 (1) SELECT * FROM T1 WHERE T1.column_A IN ( SELECT T2.column_A FROM T2 WHERE T2.column_B='XXXX' ) 上記IN句内のSELECT文の結果は、'A'、'B'、'C'、'D'です。 (2) SELECT * FROM T1 WHERE T1.column_A IN ('A','B','C','D') この(1)、(2)のSQLの結果が異なってしまいます。 私の環境では(1)では0件、(2)では2件ヒットします。 なぜこのようになるのかわかる方がいらっしゃいましたら ご教授ください。 ちなみに、DBを操作して、副問い合わせのSELECT文の結果を 'A'、'B'とすると同じ結果が得られます。 副問い合わせのSELECT文の結果が3件以上になると(1)のSQLの 結果は0件になってしまいます。 RDBMSの障害でしょうか・・・? それとも、IN句に副問い合わせを使用する場合、 その副問い合わせの結果は2件以下にする必要がある なんてルールがあったりするのでしょうか。

  • sqlparamaterでIN句を使いたい。

    C♯での開発です。 引数で、カンマ区切りの文字列を受け取って、それをIN句に使ったSQLを発行 したいのですが、これをsqlparamaterで出来ないか悩んでいます。 キーが決まった数しかこないのであれば、 command.CommandText = "SELECT * FROM Table1 WHERE NAME IN (@name1,@name2)"; こんな感じでいいんでしょうが、動的である場合、どうしたら良いのでしょうか?

  • WHERE句でのデータ型について

    お願い致します。 ORACLEのWHERE句に対する疑問点ですが、 カレンダを管理するテーブル(カレンダマスタ)において、条件を指定してデータをSELECTする時にWHERE句に記入するデータ型についてご指導お願いします。 <詳細> 目的としてカレンダマスタよりSYSDATEの年月の休みの日を除く、稼動日数(COUNT)を求めるのが、目的です。 自分で作成した、SQLでは目的を果たしているのですが、WHERE句にTO_CHARを使用し、抽出項目(年月日-DATE型)を指定しているのですが、条件を指定する時は、TO_CHARで指定しても問題は無いのでしょうか? <SQL> SELECT COUNT(TO_NUMBER(休みFLG)) AS 稼動日 FROM カレンダマスタ WHERE 年月日 BETWEEN (TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-1))+1,'YYYY/MM/DD')) AND (TO_CHAR(LAST_DAY(SYSDATE),'YYYY/MM/DD')) AND 休みFLG='0' <補足> 休みFLG='0'は稼動日

  • php5+mysqlのSELECT文でwhere句を指定すると正しく動

    php5+mysqlのSELECT文でwhere句を指定すると正しく動きません。 レコード数を取得します。 ここで、field10(category)=text型の値に基づきレコード数を取得したいのですが、 $sql="select * from A where B='C'"; とするとレコード出力(index.php)で0を出力。 where句を指定せずに $sql="select * from A"; とするとレコード出力(index.php)で97を出力。 文字コード関係のQ&Aサイトを見ましたが、phpファイルの冒頭部分に $con = mysql_connect($DBSERVER, $DBUSER, $DBPASS); mysql_query("SET NAMES 'sjis'"); $selectdb = mysql_select_db($DBNAME, $con); を指定しています。 テーブルAに含まれるデータは、csv(,区切り)で、load data infile・・・しました。 ※Records:97 Deleted:0 Skipped:0 Warnings:0 他に考えられる原因・対処方法はありますでしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • SQLのIN句について

    DB:Oracle9i SQLのIN句のカッコ内は、何個まで書けるなど、制限はあるのでしょうか? PRO_KEY = IN (no1, no2, no3・・・)など、カッコ内が可変で、数百個、もしくは数千個ある場合、IN句を使用しデータを一度に取得するのではなく、PRO_KEY = no1のSELECT処理を発行、PRO_KEY = no2のSELECT処理を発行・・・し、ARRAYに検索結果を1つずつ詰めていく方が良いのでしょうか? 初心者で恐縮ですが、どなたかご教授ください。

  • MySQL WHERE句のLIKE検索

    初心者ですみません。 MySQL WHERE句のLIKE検索で、引っかかった文字列を 除いた項目を表示させるにはどうしたらいいでしょうか。 例えば、 SELECT * from [テーブル名] where [フィールド名] like '%あ%'; として、「あ」が入っているレコードを検索し、 該当しないレコードを表示させる。 どうか教えてください。よろしくお願いします。

  • MYSQL バイナリーデータに変換して取得

    MYSQLでSELECTして以下のテーブルのCODEカラムからバイナリーデータに変換してデータを取得したいのですが、どうしたら良いでしょうか? SELECT CODE FROM TABLE_NEME WHERE ID='XXX' <テーブルデータ> CODE(varchar型) 011A00046D0ADC4B

    • ベストアンサー
    • MySQL