• ベストアンサー

SQL文で質問です

n_breakdownの回答

  • ベストアンサー
回答No.2

ORACLEの外部結合の演算子(+)は式には利用できません。よって、TO_DATE内の列に(+)を指定してみてください。 SELECT A.X FROM A,B WHERE A.X = B.Z(+) AND TO_DATE(A.Y,'YYYY/MM/DD') = TO_DATE(B.W(+),'YYYY/MM/DD') AND B.Z IS NULL;

hidi
質問者

お礼

TO_DATE内に(+)を入れたところ、期待通りの結果を得ることが出来ました。 どうもありがとうございました。

関連するQ&A

  • SQLでデータを1件だけ取得したいのですが。

    SQLでデータを1件だけ取得したいのですが。 以下のようなテーブルが2つあるとします。 ------------------------------------ テーブルA     テーブルB   値X           値X    値Y   1           1    20   2           2    NULL   3           2    60   4           2    70               4    NULL               4    NULL ------------------------------------ ここで、テーブルAの値Xと、テーブルBの値Xをリンクさせます。 テーブルAにデータがあれば、テーブルBに無くても出力します(外部結合イメージ) テーブルAの値Xに対して、テーブルBの値Xは2件以上リンクされる可能性があります。 この場合は1件のみ出力します。 その1件の決め方は、テーブルBの値YがNULLでは無く最大の物です。 但し値Yは全てNULLの可能性もあるので、その場合NULLとして1件出力します。 上記の出力イメージ ------------------------------------  値X    値Y  1    20  (1件の場合そのまま出力。1件がNULLでもそのまま出力)  2    70  (NULLではない最大の1件を出力)  3    NULL  (テーブルBになくても出力)  4    NULL  (値が全てNULLの場合、NULLとして1件出力) ------------------------------------ どのようなSQLを記載すれば実現可能でしょうか?

  • SQLを教えてください

    単純そうなのですがSQLが分かりません。 次のような2つのテーブルがあるとします。 TableA ( a VARCHAR2(2) b VARCHAR2(30) ) TableB ( x VARCHAR2(2) y VARCHAR2(30) z1 VARCHAR2(2) z2 VARCHAR2(2) z3 VARCHAR2(2) z4 VARCHAR2(2) z5 VARCHAR2(2) ) この時にTableBはTableAのグループみたいなものでz1からz5までがTableAのaが登録されています(NULLの場合もあります)。ここでTableBの内容を表示するときに x, y, b1, b2, b3, b4, b5 と出力したいのです。 すみませんがよろしくお願いします。

  • エクセルのクエリ テーブル結合

    エクセル2000を使用しています。クエリのことがあまりよく判っていない質問かもしれませんが、外部ファイルとして以下のようなCSVファイルを2つ、クエリテーブルで結合したいのです。  A B 1 X Y 2 X Y と  A B 1 X Z 2 X Z を結合して  A B C 1 X Y Z 2 X Y Z のようにしたいのですがうまくいきません。 クエリについての超・基本的な質問かもしれませんが、ご教示頂けると助かります。宜しくお願いします。

  • SQLでMAXを使った

    □オラクルのデータ(テーブル名:abc) ------------------------------------------------- 列名 x y z date qq ------------------------------------------------- a a a 2003/12/1 a b b b 2003/01/01 b a a a 2003/12/14 b b b 2005/12/30 □結果 ------------------------------------------------- 列名 x y z date qq ------------------------------------------------- a a a 2003/12/14 a b b b 2005/12/30 b 上の結果を出したい時、SQLで "SELECT x,"_    & "y," _    & "z," _    & "Max(date) AS abc2, qq FROM abc" _    & "GROUP BY x," _    & "y," _    & "z," _ & "qq" としたらエラー「要求された名前、または序数に対応する項目がコレクションで見つかりません」 と出てしまいます。 データベースはオラクルです。 正しい書き方を教えて下さい。

  • ACCESSでの外部結合について

    当方ACCESSの初心者です。 ACCESSで外部結合をしたいのですが、LEFT JOIN とRIGHT JOINの二種類しか 選択肢が有りません。左右両方の外部結合を行いたいのですが何か良い方法を ご存知の方がいらっしゃるようでしたら教えてください。 ほしい結果は以下の通りです。 テーブルA 製品1 在庫A 製品2 在庫B 製品3 在庫C テーブルB 製品2 売上X 製品3 売上Y 製品4 売上Z 結果 製品1 在庫A NULL 製品2 在庫B 売上X 製品3 在庫C 売上Y 製品4 NULL 売上Z

  • SQL文を教えてください

    1-a,1-b,2-a,2-b,3-a,3-b,4-a,4-b,5-a,5-bというカラムがあるとき。 以下の条件を満たす行を抽出するのに、 検索速度の早いSQLの書き方はありますか? (条件)N-aに値有りのとき、N-bは値有り  ただし、1-aから5-a全て値なしのときは対象外 ※こんな書き方は思いつくのですが、遅そうで・・・ ( (1-a is not null AND 1-b is not null) or (2-a is not null AND 2-b is not null) or (3-a is not null AND 3-b is not null) or (4-a is not null AND 4-b is not null) or (5-a is not null AND 5-b is not null) ) and not(1-a is null AND 2-a is null AND 3-a is null AND 4-a is null AND 5-a is null)

  • SQL文を教えてください。

    特定の日付Xを指定した場合、 以下のような結果になるSQL文を教えてください。 よろしくお願いします。 1) 日付X = 2003-12-17 の場合 ID table_A_DATE table_B_DATE table_C_DATE ------------------------------------------------ 001 2003-12-10 2003-12-12 2003-12-14 002 2003-12-15 ---------- 2003-12-16 003 2003-12-06 2003-12-10 ---------- 004 2003-12-08 ---------- ---------- 2) 日付X = 2003-12-11 の場合 ID table_A_DATE table_B_DATE table_C_DATE ------------------------------------------------ 003 2003-12-06 2003-12-10 ---------- 004 2003-12-08 ---------- ---------- table A(テーブルAには全ユーザのデータがあります) ID DATE ------------------ 001 2003-12-10 002 2003-12-15 003 2003-12-06 004 2003-12-08 table B ID DATE ------------------ 001 2003-12-12 003 2003-12-10 table C ID DATE ------------------ 001 2003-12-14 002 2003-12-16

  • SQL 外部結合についての質問

    SQLの外部結合についての質問です。 今テーブルA,B,Cがあるとします。 AはBに対して外部結合。BはCに対して外部結合 というようにする事は出来ますでしょうか。 SQLを実行してもエラーになります (例) select A.* from A,B,c where A.項目1 = B.項目1 (+) and B.項目2 = C.項目2 (+)

  • SQLで質問があります。

    すみません。初めて質問させて頂きます。 以下のような条件のSQL生成は可能でしょうか。 可能な場合どのようなSQLになるかご教授頂けないでしょうか。 <条件> テーブルA,B,Cで一致する社員コード AND テーブルAの年月日がnull AND テーブルBの区分コードが"01"以外 AND テーブルCの部門コードでテーブルDを検索し 取得した会社コードが"00001" <取得したい項目> テーブルA.社員コード テーブルA.社員氏名 テーブルC.区分コード <テーブルA> 社員コード* 会社コード 年月日 社員氏名 <テーブルB> 社員コード* 会社コード 区分コード <テーブルC> 社員コード* 会社コード 部門コード <テーブルD> 会社コード* 部門コード* *は主キー よろしくお願い致します。

  • Oracle[10g]のSQL文について(改めて)

    すみません。[B]テーブルの作成がおかしい様でしたので、 改めて質問させて下さい。 Oracle[10g]のSQL文についての質問です。(No.???) [A]テーブルに [CODE](KEY) [CODE2] [NAME] のフィールドがあります。 A-1 B-1 NAME-1 A-2 B-2 NAME-2 A-3 B-3 NAME-3 [B]テーブルに [CODE3](KEY) [NAMEB] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] のフィールドがあります。 X 1 A-1 X 2 A-3 Y 1 A-2 結果が [NO/LINE/CODE/NAMEB] X 1 A-1 NAME-B-1 X 2 A-3 (NULL) と、なる様にしたいのです。 SELECT C1.NO, C1.LINE,C1.CODE, Tx.NAMEB FROM C1 , ( SELECT C1.CODE, TNMx1.NAMEB FROM C1, ( SELECT CODE, CODE2, CODE3, NAMEB FROM A, B WHERE A.CODE2 = B.CODE3 ) TNMx1 WHERE C1.NO = 'X' AND C1.CODE = TNMx1.CODE(+) ) Tx WHERE C1.NO = 'X' GROUP BY C1.NO, C1.LINE,C1.CODE, Tx.NAMEB と、考えたのですが、何故か結果が X 1 A-1 (NULL) X 1 A-1 NAME-B-1 X 2 A-3 (NULL) X 2 A-3 NAME-B-1 4行もでてしまいます。 問題は、[B]テーブルです。 宜しくお願い致します。