• ベストアンサー

SQLで質問です。

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

noname#244179
noname#244179
  • Oracle
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

「複数のキーの中でひとつだけ違うレコード」 これはどういう意味でしょうか? 複合キーを構成する列のうち一つだけ違うというものでしょうか? 出来ないことはないと思いますが4列でも ( A.フィールド1=B.フィールド1 AND A.フィールド2=B.フィールド2 AND A.フィールド3=B.フィールド3 AND A.フィールド4<>B.フィールド4 ) OR ( A.フィールド1=B.フィールド1 AND A.フィールド2=B.フィールド2 AND A.フィールド3<>B.フィールド3 AND A.フィールド4=B.フィールド4 ) OR ( A.フィールド1=B.フィールド1 AND A.フィールド2<>B.フィールド2 AND A.フィールド3=B.フィールド3 AND A.フィールド4=B.フィールド4 ) OR ( A.フィールド1<>B.フィールド1 AND A.フィールド2=B.フィールド2 AND A.フィールド3=B.フィールド3 AND A.フィールド4=B.フィールド4 ) のような述語が必要になりますね。 あと、「あ」「」い」「う」で「あ」「い」だけ抽出するという基準はなんなのでしょうか?(抽出するレコードの優先順位)

noname#244179
質問者

補足

説明不足で申し訳ありません。 お聞きしたかったのは、仰るとおりです。 フィールド2(「あ」とか「い」のもの)は部門コードのようなものなのですが、部門の統合で全て「い」を「あ」にしなければならないのです。しかし質問に上げたレコードに関しては一意制約に引っかかってしまうため、どう処置するか検討しなければならずそのリストを出したいのです。

その他の回答 (1)

  • papapa0427
  • ベストアンサー率25% (371/1472)
回答No.1

全フィールドを選択して良いのなら select * form テーブル名 where フィールド1="あ" or フィールド1="い" でフィールド1が「あ」と「い」の分が選択できます。初歩も初歩の問題ですね。 で、苦言ですが質問するなら元のデータは詳しくご提示ください。ご質問ではこのような結果が欲しいとの例ですね。また、選択条件を明確にご提示されないと答えようがありませんよ。 プログラミングは、うまく質問できないと言うことは作成する内容をあなた自身が分かってない事になります。内容をよく理解すればご質問の内容も的確なものになると思います。

noname#244179
質問者

補足

すみません。次回からは気をつけます。

関連するQ&A

  • SQL文の構築について教えてください。

    SQL文の構築について教えてください。 こんばんは。Oracle9iのデータベース検索で、どうしてもSQLが思い浮かばないため、質問させていただきます。 ■Table ID    NUM   SIGN 100   1    A 100   2    A 101   1    A 102   1    B 103   1    B 104   1    C 首キーはID、NUMです。 上記のようなテーブルで、 IDが同一かつNUMが最大のもので、 SIGNが同一のレコードで、2件以外のレコードを抽出したいです。 (例表でいうと、ID104のレコードのみが抽出されるようにしたい) すこし急ぎなんですが、SQLが得意でお時間がある方、力を貸していただけないでしょうか。 よろしくお願い致します。

  • SQL文の書き方

    SQLを勉強しています。 レコードの中で指定フィールドの文字列が、指定文字から始まるレコードを取り出したいのですがSQL文の書き方がわかりません。 例) 1, AAA 2, BBB 3, CCC 4, ABC 上記の4つのレコードから"A"から始まるレコードを取り出したい。 結果は[1, AAA]と[4, ABC]が欲しいのです。

  • 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 以下はいろいろおかしいんだろうな・・・と 思っていたのですが、まさか、そんなしょっぱなで引っかかるとは思いませんでした。 いろいろ、記述方法を変更してみたり、考えたんり したんですけど、情けないことにさっぱり解りません。 どなたかお力をお貸しください。 お願いします。

  • Access2000のSQL文の質問です。

    Access2000のSQL文の質問です。(長文) [OYA]テーブルに、OYA_CODE(KEY),OYA_NAMEのフィールドがあります。   データは、1 , A 2 , B です。 [KO]テーブルに、KO_CODE(KEY),KO_NAMEのフィールドがあります。   データは、11 , A-1 12 , A-2 13 , A-3 21 , B-1 22 , B-2 です。 [TENKAI]テーブルに、OYA_CODE(KEY),KO_CODE(KEY),CNTのフィールドがあります。   データは、1 , 11 , 1 1 , 12 , 2 2 , 21 , 3 2 , 22 , 4 です。 [DATA]テーブルに、OYA_CODE(KEY),KO_CODE(KEY),CNTのフィールドがあります。   データは、1 , 11 , 10 1 , 12 , 20 2 , 21 , 100 2 , 22 , 200 です。 結果を OYA_CODE, OYA_NAME, KO_CODE, KO_NAME, KEI 1, A, 10 1, A, 11, A-1, 10 1, A, 12, A-2, 40 2, B, 100 2, B, 21, B-1, 300 2, B, 22, B-2, 800 と、したいのです。 つまり、[TENKAI]のCNT×[DATA]のCNT が、ほしいのです。 ネックは、OYA_CODEのみのレコードが出ないのです。 このテーブルにこう言うフィールドをつける等、 具体的にご支持を頂ければ幸いです。 宜しくお願い致します。

  • SQLでご質問があります

    SQL初心者です、、 SQLについてご教授ください。 ※ACCESSですが、他DB用でもこちらで変更します。 以下のデータがあるとして、同じ「コード」が2件以上あるもので 「カラム1」が複数(2種類以上)あるものを抽出したいと考えております。 ※同じ「コード」2件以上→コードが'0001','0003' ※「カラム1」が複数もの→コードが'0003'(bbbb,eeee,ffffの3種類ある) コード,カラム1 0001,aaaa 0001,aaaa 0002,aaaa 0003,bbbb 0003,eeee 0003,ffff の場合ですと結果として以下3レコードを出力したいです。 コード,カラム1 0003,bbbb 0003,eeee 0003,ffff 以上です。よろしくお願いします。

  • この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がよくわかりません。 どうか教えて頂きたいと考えています。 宜しくお願い致します。

  • ビュー(view)のSQL

    SQL初心者で困っております。 どのようなSQLを作成すれば良いか ご助言頂ける方がいらっしゃいましたら よろしくお願いいたします。 テーブルにイメージは以下通りです。 項目1,日付,月,項目2,項目3 1234 ,6/2 ,6 ,A ,1 1234 ,6/4 ,6 ,A ,2 1234 ,6/5 ,6 ,A ,3 1234 ,6/6 ,6 ,B ,1 1234 ,6/6 ,6 ,B ,2 1234 ,6/6 ,6 ,B ,3 1234 ,7/2 ,7 ,A ,1 1234 ,7/4 ,7 ,A ,2 主キーは、項目1,日付です。 ビューで項目1,月をグループ化して、 項目2の昇順のトップ その中で項目3の昇順のトップ のレコードを抽出したいと思います。 結果が以下のようなイメージです。 1234,6,A,1 1234,7,A,1

  • ACCESS 以下のようなレコードを抽出するSQL

    ACCESSのデータベースで あるフィールド(フィールドAとします)の値に対して、 別のフィールド(フィールドBとします)の値が1つに決まる データベースがあるとします。 例えば、フィールドAの値が1のレコードは、 どのレコードもフィールドBの値はaである。など このようなデータベースでこのような関係になっていないレコード 例えば、フィールドAの値が1のレコードの中に フィールドBの値がaであるレコードと フィールドBの値がbであるレコードがある。など を抽出するSQLはどのように記述すればよいでしょうか。 テーブル名はTABEL1とします。 次の2つのケースでお願いします。 (1)フィールドAの値が異なればフィールドBの値が異なる場合 例えば、フィールドAの値が1で、フィールドBの値がaであるレコードが ある時、フィールドAの値が1でないレコードの中には、   フィールドBの値がaであるレコードが存在しない場合   (2)フィールドAの値が異なるがフィールドBの値が同じこともある場合 例えば、フィールドAの値が1で、フィールドBの値がaであるレコードが あっても、フィールドAの値が1でないレコードの中にも、   フィールドBの値がaであるレコードが存在する場合 【回答例】(ただし、1,a,bなどの具体的な値は使わないこと) ・フィールドAの値が1のレコードを表示する例 SELECT * FROM TABLE1 WHERE フィールドA=1; ・フィールドAの値が1でフィールドBの値がaのレコードを表示する例 SELECT * FROM TABLE1 WHERE フィールドA=1 AND フィールドB='a'; ・フィールドAの値が1でフィールドBの値がaのレコードと  フィールドAの値が1でフィールドBの値がbのレコードを表示する例 SELECT * FROM TABLE1 WHERE (フィールドA=1 AND フィールドB='a') OR (フィールドA=1 AND フィールドB='b'); この目的は、データベースに問題があり、 問題となっているレコードを見つけて直したいのです。 よろしくお願いします。

  • SQL文で・・・

    こんにんちは。ご多忙だと思いますが回答宜しくお願い致します。 今、VBのソースを見ているのですが(VB初心者)、SQL文を作成している 部分があるのですが、ちょっとわかりません。 w_st_sql = "SELECT * FROM AAAA WHERE (K1 || K2 || K3) = " & "'" & p_st_key & "'" 上記のソースは(自分なりに解析したんですが)、テーブルAAAAのレコードで 変数p_st_keyの値がフィールドK1, K2, K3のどれかに当てはまるすべてのフィールドを取得する考えでよろしいのでしょうか? わからない部分は"(K1 || K2 || K3)"です。 すごく簡単な事かもしれませんが宜しくお願い致します。

  • オラクルではできるのにSQLSERVERではサブクエリーで複数キーを指定できない?

    サブクエリーで複数キーを指定したいです。例えば以下のようなSQLですが、 SQL> > select * from テーブルA > where (key1,key2) in (select key1,key2 from テーブルB) このSQLはオラクルでは実行できますが、SQLSERVERでは文法エラーになってしまいます。SQL SERVER ではサブクエリーで複数キーを指定するのは不可能なのでしょうか?