• 締切済み

このSQLは!!

できないでしょうか? 失礼しました。質問をさせていただきます。 テーブルAにフィールドがF1, F2, F3, F4とあります。 たとえばF2とF3を連結させてものが"1234"に等しいレコードを取得 (例えば      F1 F2 F3 F4 --------------------------------------------------      11 22 33 44      55 66 77 88 →    11 12 34 56      99 99 99 99    →のレコードを取得したいんです。) したいときのSQLがよくわかりません。 どうか教えて頂きたいと考えています。 宜しくお願い致します。

  • 653
  • お礼率36% (138/382)

みんなの回答

noname#1802
noname#1802
回答No.4

列連結の方法は下記の方の回答とおりです。 連結を使用できない場合はこんな感じで・・・ select * from A where (F2 = "1234" and F3 is null) or (F2 = "123" and F3 = "4") or (F2 = "12" and F3 = "34") or (F2 = "1" and F3 = "234") or (F2 is null and F3 = "1234") ; こんな感じですね(笑)

653
質問者

お礼

なるほど(笑) ありがとうございました

  • mfuku
  • ベストアンサー率50% (173/345)
回答No.3

653さん、こんにちは、先ほどのご質問でおわかりだと思いますが、|| は文字列結合演算子ですので、 SELECT * FROM A WHERE F2 || F3 = '1234'; となります。 文字列結合演算子は、 Oracleの場合、|| SQL-Serverの場合、+ ACCESSの場合、& または + となりますので、ご注意くださいね。

653
質問者

お礼

mfukuさんありがとうございます。 確かに先ほど質問しました(笑) 再確認の意味をこめてきいてしまいました。 ありがとうございます。

回答No.2

select * from A where (F2 || F3) = '1234' これじゃダメかしら…?

  • kj_
  • ベストアンサー率39% (9/23)
回答No.1

SQLをそのまま書きます select * from テーブル名 where F2 || F3 = '1234' 以上です! sqlでの || は文字の結合を意味します。 んでは 頑張ってくださーい

関連するQ&A

  • 絞込みする時のSQLの書き方

    お世話になります。 絞込みする時のSQLの書き方について教えてください。 具体的には テーブル名tbl01,フィールド名f01,f02とした場合 1.f01もしくはf02にAという文字を含むレコードを抽出。 SQL = "select * from tbl01 where f01 like '%A%' or f02 like '%A%'" 2.続いて、1で抽出したデータからf01もしくはf02にBという文字を含むレコードを抽出するSQL文 SQL = ????? あくまでも、1と2を満たす条件を1つのSQL文で表す方法です。一旦、1の結果をワークテーブルに落とし、そこから2だけのSQL文を実行するわけではありません。

  • SQLで質問です。

    SQLで以下のようなレコードを引くことは出来るでしょうか。 オラクル9です。 フィールド1  フィールド2  フィールド3  フィールド4  5... (1~4でキー) A  あ  1  2011/01/01  ... A  い  1  2011/01/01  ... 以上のように、複数のキーの中でひとつだけ違うレコードを出すSQLはどう組めばよいでしょうか。 「あ」と「い」両方出したいのと、「う」があっても「あ」と「い」に限定できれば最高です。 よろしくお願い致します。

  • SQL文で

    すみません。質問させてください。 A,B,C,D,Eと5個のフィールドで構成されたテーブルtableがあるとします。 tableにはデータがすべて格納され(NULLなし)ています。 ですが、フィールドA,C,DについてA,C,Dとも同じデータが格納される ことがあります。 その重複したデータ以外を取得したいのですが (要するにフィールドA,C,Dでユニークのデータのみ取得) SQL文でどのように書けばいいかわかりません。 よろしくお願いいたします

  • 一つのSQL文で取得したい

    こんにちは。 テーブルAに以下のようなデータがあるとします。 ID |名称 |項目 -------------- 01 |ああ | 02 |いい | 03 |うう |01,02 04 |ええ |01 SELECT文で取得したいのは、フィールド「項目」の値を、他のレコードの名称で置き換えた列です。 つまり、 ID |名称 |項目 |項目名称 ------------------ 01 |ああ | | 02 |いい | | 03 |うう |01,02 |ああ,いい 03 |ええ |01 |ああ という結果が欲しいということです。 「項目」の値はカンマで区切られています。 これを一つのSQLで取得したいと思っています(テーブルの結合、サブクエリーはOK)が、方法がわかりません。 どなたかどうぞご教授ください。 よろしくお願い致します。

  • SQL文(アクセスで使用)

    結果テーブルに グループ名、地方、人数、成績の4フィールドがあり、成績フィールド降順で並んでいます。(昇順に変更しておくことも可能です) 上記で、グループ名を指定して、成績トップの(地方、人数、成績)を抜き出すSQL文を教えて下さい。(同点がある場合は、結果テーブルで先にあるほう一つのみ取得する) 例、グループ名が、A又は、Bのうち、成績トップのレコードの3フィールド(地方、人数、成績)を取得。但しトップが複数ある場合は、結果テーブルで上位にあるほう一つのみ取得する グループ名指定の繰り返しが多いため(VBAで繰り返しグループ指定)、速度ができるだけ早いSQL文をお願い致します。 よろしくお願いします。

  • 2つのテーブルのデータまとめて取得したい

    SQL Server2008を使用しているのですが、どうのようにデータを取得すれば良いか わからず困っております。 例えば、 名前は違うが全く同じテーブルが2つあるとします。 テーブルAには6レコード、テーブルBには3レコードのデータが存在するとします。 この時、単純に6レコード+3レコードの 9レコード分をひとつのテーブルとしてデータを 取得するにはどのようなSQL文を書けばよいでしょうか? SELECT * FROM テーブルA, テーブルBでは18レコードもデータを取得してしまい、且つ フィールド数も増加してしまいます。 宜しくお願いいたします。

  • SQL詳しい方、助けてください。

    こんにちは。 UPDATE テーブルA SET フィールドA1 = '1' WHERE フィールドA2 =(SELECT フィールドB1 FROM テーブルB WHERE フィールドB2 = 'C0' OR フィールドB2 = 'C2' AND フィールドB3='') AND フィールドA3 = '' AND フィールドA4 <> '' というSQLを作成して、動作していたので安心していたら、 テーブルBのレコード数は1件のみだと思っていたら、複数存在する場合があるとのことで、 テーブルBのレコードを追加してみたところ、、 【サブクエリは複数の値を返しました。サブクエリが = 、!= 、<、<= 、>、>= のあとに続く場合や、 サブクエリが 1 つの式として使われる場合に複数の値は許可されません。】 というエラーで終了するようになってしまいました。 そこで、 UPDATE テーブルA AS A INNER JOIN テーブルB AS B ON A.フィールドA2 = B.フィールドB1 SET A.フィールドA1 ='1' WHERE B.フィールドB2 = 'C0' OR B.フィールドB2 = 'C2' AND B.フィールドB3='' AND A.フィールドA3='' AND A.フィールドA4 <> '' としてみました。 なんだか混乱してきて、結合条件があっているかが 自分でもよくわかんなくなっていますが。 しかも、 上記のSQLをSQL SERVER 2000のクエリアナライザで 実行すると、 【キーワード 'inner' 付近に正しくない構文があります。】 というエラーが・・・。 INNER 以下はいろいろおかしいんだろうな・・・と 思っていたのですが、まさか、そんなしょっぱなで引っかかるとは思いませんでした。 いろいろ、記述方法を変更してみたり、考えたんり したんですけど、情けないことにさっぱり解りません。 どなたかお力をお貸しください。 お願いします。

  • SQL文作成のお願い

    前提として下記のようなテーブルがあります。 テーブル名:test フィールド: 1)id: varchar, not null 2)name: varchar 3)date: timestamp with time zone, not null このテーブルに下記のようなレコードがあります。 '00001', 'A', '2005-01-01 00:00:00' '00001', 'B', '2005-07-01 00:00:00' '00001', 'C', '2005-11-01 00:00:00' '00002', 'X', '2005-01-20 00:00:00' '00002', 'Y', '2005-07-20 00:00:00' '00002', 'Z', '2005-11-20 00:00:00' ■今やりたいこと このテーブルからidごとにdateフィールド値が最近のレコードを取得したい。 ■やってみたこと 下記SQLを発行しました。 >select id, max(date) from test group by id order by id 結果==> 00001 2005-11-01 00:00:00 00002 2005-11-20 00:00:00 実際はnameフィールドの値も取得したいのですが、group by句を使うとフィールド指定ができませんでした。 ■だめだったSQL select id, name, max(date) from test group by id order by id どのようにSQLを書けばよろしいでしょうか?

  • SQL文のWhereについて

    SQL文を分析している最中ですが、以下の構文の意味がわかりません。 where Aテーブル.Aフィールド = Bテーブル.Aフィールド and Aテーブル.Aフィールド = Cテーブル.Aフィールド(+) and Aテーブル.Aフィールド = Dテーブル.Aフィールド(+) この構文の「(+)」の意味を教えて下さい。 宜しくお願い致します。

  • order by について

    質問させてください。 下記テーブルがあるとします。 [samle_tbl](フィールドa, b(integer)) ====== a|b ====== 2|* *|4 3|5 4|2 *|1 2|6 1|2 (※*はNULLデータ) 上記のテーブルでa, bフィールドにおいて数字の大きいレコード順に取得したいとかんがえています。 2|6 3|5 *|4 4|2 2|* 1|2 *|1 簡単にいうとa, bフィールドの値においてどちらかの数値がa, bフィールド内において降順にレコードをシュとくしたいです。 同じ順番に値する場合*(NULLデータ)を含むレコードと含まないレコードの順番は気にしません。 どのようなSQLを実行すれば取得できますでしょうか?