• ベストアンサー

演算子の件です。

演算子の件です。 例えば、 a.field と b.fieldが等しいデータと抽出 SELECT * FROM tablea AS a, tableb AS b WHERE a.field = b.field はOKなのですが、 a.field に b.fieldが含まれるデータと抽出 SELECT * FROM tablea AS a, tableb AS b WHERE a.field like %b.field% は駄目でした。 値であれば %atai% でOKだと思うんですが、フィールドを指定した値で 任意文字等を指定することは可能なのでしょうか?

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

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

like 検索で % 文字を付加するときは、concat(str1,str2,,) を使います where a.field like concat('%',b.field, '%')

kenken8378
質問者

お礼

解決です。 ありがとう!

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

関連するQ&A

  • ACCESSテーブル2つのデータの比較について

    アクセステーブル2つのデータ比較について質問があります、 宜しくお願いいたします。 Access, Excel, VBは初心者レベルです。 TableA,TableBというフォーマットが同じなテーブルがあり、 データが同じかを比較をし、どちらかのテーブルにないエントリーが ある場合はそれを出したいと思います。 途中まで出来たのですが、uniqueではないデータがある為に正確な情報がでません。 具体的には: TableA        | TableB Field1 Field2 | Field1 Field2 AAA 10 | AAA 10 BBB 100 | BBB 100 CCC 200 | CCC 200 CCC 200 | EEE 100 DDD 100 | 希望の答えは Field1 Field2 Field3 CCC 200 NotInB <--- これがでません DDD 100   NotInB  <--- これはだせました EEE 100 NotInA  <--- これもだせました 以下のようなものを書いたのですが、CCCのエントリーがTableBに 一件あるので件数が違うにもかかわらずひけませんでした。 SELECT TableA.*, "NotInB" as Field3 FROM TableA LEFT JOIN TableB ON (TableA.Field1=TableB.Field1) AND (TableA.Field2=TableB.Field2) WHERE TableB.Field1 Is Null; UNION ALL SELECT TableA.*, "NotInB" as Field3 FROM TableA RIGHT JOIN TableB ON (TableA.Field1=TableB.Field1) AND (TableA.Field2=TableB.Field2) WHERE TableA.Field1 Is Null; 一致したらフラグを立てて、再チェックしないようにすればいいのだと思うのですが、アクセスのクエリ、VBなどでどのようにすればできますか?  もしくはアクセスからxlsなどに落としてから、ファイルの状態で比較 (会社で使うので外部ソフト等が使えません) をVBでするといった方法を検討した方がいいのでしょうか? 色々調べてみたのですが、どっちもやり方が分からないので、 それはそもそも出来ないよなどの アドバイスもございましたら、どうぞ宜しくお願いいたします。

  • SQL文の書き方

    SQL文の書き方を教えて下さい。 以下の2つのクエリー(1のクエリー&2のクエリー)を1つのクエリーで1度に抽出をかけたいのですがSQL文の書き方がわかりません。 データの発生条件としては TableBのField1は必ずTableAのField1に存在するという条件です。 TableAのField1が「AAA」から「EEE」まである場合は、TableBのField1も必ず「AAA」から「EEE」の範囲内で発生します。 よろしくお願い致します。 1のクエリー ---------------------------------------------------------------- TableA Field1 ---------------------------------------------------------------- AAA AAA AAA BBB BBB CCC DDD DDD EEE EEE EEE ---------------------------------------------------------------- Field1をサマライズしてカウントと名称を取得するクエリー Select Count(TableA.Field1) as RecCount, TableA.Field1 From TableA 結果 RecCount  Field1 3      AAA 2      BBB 1      CCC 2      DDD 3      EEE ---------------------------------------------------------------- 2のクエリー ---------------------------------------------------------------- TableB Field1 ---------------------------------------------------------------- BBB CCC CCC EEE ---------------------------------------------------------------- Field1をサマライズしてカウントと名称を取得するクエリー Select Count(TableB.Field1) as RecCount, TableB.Field1 From TableB 結果 RecCount  Field1 1      BBB 2      CCC 1      EEE ---------------------------------------------------------------- 希望する結果 TableAのRecCount TableBのRecCount TableAのField1 3                   AAA 2         1         BBB 1         2         CCC 2                   DDD 3         1         EEE

  • 複数表からのカウントを教えてください

    <table A> no name 1 yoshida 2 tanaka <table B> no sub score 1 german 100 1 english 100 1 science 50 tableAとtableBの2つの表があり 1 yoshidaさんが100点をとった科目の数を (ここでは2となります) カウントしたいのですが以下の_________で どのように入力したらいいでしょうか 先週から始めたばかりで表の入力はできるよう になったのですがカウントのしかたがよく わかりません よろしくお願いします SELECT tableA.no as No, tableA.name as Name, ___________________ FROM tableA, TableB where(tableA.no = tableB.no and tableB.score = 100 and tableB.no = 1 )

    • ベストアンサー
    • MySQL
  • 複数表での集計値について

    以下のようなテーブル構造。SQLで 集計値を求めたいのですがCNTの値が tableCの件数を取得してしまいます。 (取得したいのはtableA.ID毎のtableB.ID2の件数) 宜しくお願いします。 ・tableA ------------- ID ------------- ・tableB ------------- ID | ID2 ------------- ・tableC ------------- ID2 | TIME ------------- SELECT tableA.ID ,SUM(tableC.TIME) AS TIME ,COUNT(tableB.ID2) AS CNT FROM tableA,tableB,tableC WHERE tableA.ID = tableB.ID AND tableB.ID2 = tableC.ID2 GROUP BY tableA.ID

    • ベストアンサー
    • MySQL
  • OUTER JOIN とgroup by

    こんにちは。 mysqlのselect文なのですが、LEFT OUTER JOIN した右側をgroup byし、そのなかで最大値を持つものを結び付けたいのですが、四苦八苦やってみたところ2日ほど解決できず・・・。 どなたかご教授いただけますと助かります。 テーブルなどは以下の通りです。 ---tableA----(テーブル名) user / supplier(カラム名、以下レコード) 1 / 1 1 / 2 1 / 3 2 / 1 2 / 3 ---tableB--- skuno / supplier / update_at 1 / 1 / 2011-12-12 2 / 1 / 2011-12-13 3 / 1 / 2010-11-10 検索の目的は、特定のカラムuserに対応する(例えばuser = 1)supplierの値(1,2,3)を取り出し、tableBにおいて、それぞれの値に結びつくskunoのうち最新のupdate_atを持つskunoを取り出したいというものです。 上記の例の場合、希望する検索結果は以下のような想定です。 supplier / skuno 1 / 2 2 / null 3 / null 私が検討してみたsql文は以下の通りなのですが、 select supplier,skuno from tableA LEFT JOIN tableB ON tableA.supplier = tableB.supplier where tableA.user = 1 and tableB.update_at IN (select max(update_at) from tableB group by supplier) group by tableA.supplier; この場合だと、右側がnullだとsupplierの値が表示されず、 supplier / skuno 1 / 2 となってしまいます。 select supplier,skuno from tableA LEFT JOIN tableB ON tableA.supplier = tableB.supplier where user = 1 group by supplier; だと右側のテーブルの値が指定できず・・・ ここからどのように条件付けをしたらよいのか、お力添えをいただけますと幸いです。 よろしくお願い申し上げます。

    • ベストアンサー
    • MySQL
  • あいまい条件抽出についてのSQL文について

    あいまい条件抽出についてのSQL文について hiroです。 SQL文について、教えてほしいのですが、 下記のようなDatabaseがあったとします。 tableA:カラムA:ABCDE,BCDEA tableB:カラムB:??C?? この場合、例えば、 SELECT * FROM DataBase WHERE tableA.カラムA like tableB.カラムB みたいな感じで、カラムAのABCDEだけを検索するような仕組みを作ることは 可能でしょうか? ※上のSQL文では引っ張れないのは理解できています。 わかる方がいらっしゃいましたら、SQL文を教えてください。 よろしくお願いします。 環境:Oracle 11g

  • Joinしてカウントしたいのですが,,,

    どうにもSQLになじめず困っている初心者です。宜しくお願い致します。 tableAとtableBがあり,それぞれ6つの列があります。両方とも,英語の人名を入力したものです。 tableAは添付した画像のようになっていて, A_ID, A_Key, A_firstname1, A_firstname2, A_lastname1, A_lastname2 と6つの列があります。要は英語の人名のデータなのですが,別名や綴り違いがあるためにfirst nameもlast nameも2列ずつあります。tableAは,これが数百行あります。 tableBも同様に, B_ID, B_Key, B_firstname1, B_firstname2, B_lastname1, B_lastname2 と6つ列があります。ただしこちらは数万行あります。 やろうとしていることは,名前の綴り違いなどを考慮して,tableBの中にtableAの人名が何回出てくるか数えて,その数字をA_IDと一緒に表示するViewを作る,というものです。 そこで,以下のようなクエリを書きました。DBMSはMySQL 5.2を使っています。 Create View NewView as select tableA.A_ID, count(*) as Num from tableA join tableB on (tableA.A_firstname1 in (tableB.B_firstname1, tableB.B_firstname2)) and (tableA.A_lastname1 in (tableB.B_lastname1, tableB.B_lastname2)) group by tableA.A_ID ところが,出力されたViewはどうも思っていたものとは違い,名前が一致していないものもカウントされてしまいます。どこが間違っているのでしょうか。 お詳しい方のお知恵を拝借できたらと思います。どうか宜しくお願い致します。

  • 複数表からのカウント(2)教えてください

    前回の質問と関連しますが 今度は複数の人について 以下のような処理を行うときのクエリーでうまくいか ないのですがどのようになおせばいいでしょうか。 よろしくお願いします <table A> n id name 1 1 yoshida 2 2 tanaka <table B> n id sub score 1 1 AAA 100 2 1 BBB 100 3 1 CCC 50 4 2 AAA 80 5 2 BBB 100 6 2 CCC 50 <result> name count yoshida 2 tanaka 1 tableAとtableBの2つの表があり tableAの2人(以上あり)のscoreが100である subの数をカウントしたい場合 SELECT tableA.name as Name, count(*) FROM tableA, TableB where(tableA.id = tableB.id and tableB.score = 100 )

    • ベストアンサー
    • MySQL
  • 2つのテーブルをLIKE演算子のように結合させたい

    こんにちは DB2 ver 8.1 fixPak5 VB6 にて開発を行っております。 TABLEa の NAMAEa KANKEIa TABLEb の ADANAb FLAG というテーブルがあるとします そしてそれぞれのテーブルに TABLEa のNAMAEa に '山田' TABLEb のADANAb に '山' というデータがはいっていたとき この2つのデータをLIKE演算子のように結合させたいのですが、どのようにしたらいいのでしょうか。 イメージとしては SELECT NAMAEa, KANKEIa, FLAG FROM TABLEa LEFT OUTER JOIN TABLEb ON NAMAEa LIKE ADANAb% 伝わるでしょうか・・・ できたら1つのSQL文で完結させたいです。 駄目だったらRecordSetにもたせて処理しようかと思いますが、 今後の為にも何か方法があるのでしたら教えてください。

  • 別テーブルの値をsetしてupdateしたい

    テーブルAとテーブルBで、idが一致したデータのみ、 テーブルAのフィールドにテーブルBの値を入れたいです。 tera termを使用して、 UPDATE tableA as a, tableB as b SET a.value = b.value WHERE a.id = b.id 上記のupdate文を流すと一行目の[as a]からsyntaxエラーが出ます。 ERROR 1064: You have an error in your SQL syntax near 'as a, tableB as b SET ~' at line 1 書き方が悪いのでしょうか? どのように記述すればb.valueをa.valueにsetできますか?

    • ベストアンサー
    • MySQL