• 締切済み

検索条件について

サーバ上にある以下のようにLOAD DATAでデータベースに登録し LOAD DATA INFILE "/home/abc/test001.csv" INTO TABLE test FIELDS TERMINATED BY ','; ENCLOSED BY '"'; 登録することはできたのですが個々テーブル毎では検索できますが 複数のテーブルで検索するとうまく検索できません。 【個々のテーブルは問題なし】 select * from abc where xyz=12345; select * from 123 where xyz=12345; これですと問題なく検索がヒットします。 【複数のテーブルで検索するとうまくいかない】 select * from abc,123 where abc.xyz=123.xyz; これですと検索してもヒットしません。 ちなみにabcのxyzにある項目を「'」で括ると検索できませんでした。 データは"1","12345"でセットしています。 LOAD DATAのやり方が悪いのでしょうか? どなたか教えていただけませんでしょうか。

  • MySQL
  • 回答数1
  • ありがとう数1

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

個々のtableで表示出来るならデータは読み込めているので、load時の問題ではない。 でも、テーブル名が数字のみってあんまりよくないと思う。where条件の中では普通の数値integerと区別出来なくなっているんでは?table名をきちんと``で括るべき select * from abc,`123` where abc.xyz=`123`.xyz;

yasusufer
質問者

補足

すみません。 テーブル名はあくまでも例でそのように してしまいました。 実際のテーブルは数字ではありません。 紛らわしい記載のしかたで申し訳ございません。

関連するQ&A

  • SQLで'ABC'をDBの'AB'にHIT

    sqlite3をVC++2013で扱っています。 もしかしたら、単純な方法があるのかもしれないので質問させてください。 DBに渡す文字が'ABC'でDB内のデータ'AB'にHITさせたいと思っています。 現状思いつく方法は select * from テーブル where キー like 'A%'; select * from テーブル where キー like 'AB%'; select * from テーブル where キー like 'ABC%'; と渡す文字を一文字ずつ増やして検索して row数が0以上の一番小さい数のデータを取得するという方法しか思いつかないのですが。 何か良い方法はありますでしょうか?

  • 4つのテーブルから、該当する項目を一度に検索したい。重複除く

    4つのテーブルから、それぞれ違う条件で検索し、該当する項目名NO を探したいのですが、どのようなselect文を書くと効率よく検索できる のでしょうか?また、重複NOは除きたいのです。 良かったら教えて下さい。 例えば、テーブル名:test1,test2,test3,test4とあった場合、 一度に該当するNOを拾い出す方法があれば、教えて下さい。 1.select no from test1 where code = '' and day < 20041118; 2.select no from test2 where day < 20041118; 3.2.select no from test3 where data != '' and day < 20041118; 4.select no from test4 where day > 20041018 and day < 20041118;

  • 複数のテーブルから同じ条件で検索したい。

    例えば、テーブルがA,B,C,Dとあって、レイアウトはそれぞれ違います。 ですが、全てのテーブルに共通の項目もあります。 共通項目名:FLG このような前提で、 A,B,C,Dのデータを同じ検索条件で全ての内容を表示させたいのですができませんか? ベタに書くと select * from A where FLG='2'; select * from B where FLG='2'; select * from C where FLG='2'; select * from D where FLG='2'; と言う感じで結果を表示させたいのです。 実際にはテーブル名がものすごい数なので、ベタに書きたくないので、この部分をtab テーブルのtnameとかを使っていっぺんに検索結果が出せればありがたいのですけが・・・ こういうのはシェルとか使わないとだめですかね?(DBはオラクルです。)

  • 検索の仕方

    下記の場合の検索する方法を教えてください。 テーブル:abc id : キー xyz_id : xyzのキーが入る テーブル:xyz xyz_id : キー xyz_name : 適当な文字 テーブルabcに登録されていないテーブルxyzのxyz_idだけをSELECT文で抜き出したいのです。 大変、くだらない質問で恐縮ですが、よろしくお願いいたします。

  • インデックスを用いたbetween検索について

    Cで1~360000までのランダムな整数の列(col1)を含む100万件のデータを作成し(50MB弱)、 create table table1(・・・, col1 integer not null, ・・・); で作ったテーブルにload data infile文で挿入し、 create index index1 on table1(col1); でインデックスを作成しました。 select * from table1 where col1 between 1000 and 2000; といったような検索(約2500件ヒット)をしたいのですが、この検索ではインデックスを作らないテーブルのほうが速く検索できてしまいます。 select * from table1 where col1 between 100 and 200; のような検索(約250ヒット)ではインデックスの効果があり、高速検索ができますが。 環境はMySQL-5.0.26、ノートPC(256MB)、Fedora Core5、設定ファイルはMy-large.cnfを、ほぼそのまま使用しています。 上記のような少し大きめの検索範囲でもインデックスを用いた検索を改善する方法をご教授お願いします。何かのパラメータが決定的に足りないと思うのですが。

  • 文字検索、列をまとめたい

    以下のようなテーブルで「test_id」ごとに文字列(contents)をまとめたいのです。 [テーブル1] test_id | name 1 山田 2 佐藤 3 鈴木 [テーブル2] id | test_id | contents 1 1 東京は晴れです。 2 1 電車です。 3 2 埼玉は晴れです。 4 3 電車です。 検索処理でテーブル1と2を結合しの「name」を表示します。 contentsが「東京」「電車」でand検索をすると0件になり、or検索をすると3件(名前は2人)ヒットするのですが、 「東京」「電車」としたときtest_idの「1」をヒットさせたいのです。 test_idをgroup byでsum(数値)のように文字列を指定するには どのようにすればいいのでしょうか。concatを使ってみたのですが、 (contentsのみを指定したから?)結果は得られず、わかりませんでした。 $sql="SELECT id,test_id,concat(contents), FROM テーブル1 as t1 left join テーブル2 as t2 on t1.test_id=t2.test_id where $where group by t2.Itest_id"; MySQL:4.0.27です。 よろしくお願いします。

  • 比較条件と検索速度について

    お世話になります。 現在、Oracleの検索速度の違いで、少し気になっています。 Select文に、Where比較条件を入れました時に、「AND」だけの複数条件 と、「OR」を混ぜた時の検索時間に、違いがあるように感じていました。 例えば、ORの条件をつけずに、 『where abc='a'』 と 『where abc='b'』のSelect文を2回実行することより、 『where abc='a' or abc='b'』と実行した方が大きく時間がかかってしまう様な ことは、起きるのでしょうか。 よろしくお願いいたします。

  • 複数(2つ)のテーブルで検索を行いたい

    MySQL 3.23です。 select count(*) as hit from freedata where (A=10 or B=10); という構文と select count(*) as hit from sharedata where A=10; という構文を一行にしたOR検索を行いたいのですが、方法はありますか? 要は、同一のキーワードで、二つのテーブルを検索対象にしたいのです。ご教授よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • sqlのwhereで指定した条件の前後を取得したい

    テーブル=T) KEY DATA 001 あ 002 い 003 う 004 え 005 お SQL) SELECT DATA FROM T WHERE KEY = 003 ; 上記のSQLでは、「う」のデータしか取得できませんが、 「003」の前後1件、合計3件の「い」「う」「え」を取得する方法を教えて下さい。 ちなみに、 SELECT DATA FROM T WHERE KEY >= 003 AND ROWNUM <= 2 と SELECT * FROM ( SELECT DATA FROM T WHERE KEY < 003 ORDER BY KEY DESC ) WHERE ROWNUM < 1 のUNIONでは上手く行きませんでした。 よろしくお願いします。

  • SQLでの前検索・後検索

    はじめまして。 SQL初心者です。宜しくお願いします。 使用DBはMSSQL又は、Accessです(テスト中) まず、下のようなテーブルがあります。 (テーブル名 Tabel1) (フィールドは全てstring型) [ Date ][ No ][Data1][Data2] ... [20040808][0001][ 1 ][ 2 ] ... [20040808][0002][ 2 ][ 3 ] ... [20040809][0001][ 3 ][ 4 ] ... 検索キーは[Date]と[No]を使用しています。 そして、例えば、[20040809][0001]を検索し、そのデータの一つ前のデータを取得したい場合、次のようなSQLを使用しました。 SELECT TOP 1 * FROM Table1 WHERE DATE + NO < '200408090001' ORDER BY DATE + NO DESC しかし、この検索は、前データが膨大に存在した場合に(テストでは数万件)、検索時間がかなり長くなるようでした。 もっと良いSQLコマンド、または対処法がありましたら御教授の程宜しくお願い致します。