• 締切済み

なぜ構文エラーにならないのでしょうか?

maiko0333の回答

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.1

oracleは私の環境にないので実験はできませんが、可能性として。 内部のSelectはエラーになるとのことですので Select sum_qty as "13日の金曜日" From ( ”えらーだー、エラーと言ったらエラーだ” ) というようなSelectになっている可能性がありますね。 13は真ん中のメッセージの一部かと。

mokaid
質問者

補足

真ん中のメッセージというは不明ですが、下記のように値を変えると、結果は5555という値が返ってきます。 Select sum_qty as "13日の金曜日" From ( Select key,Sum(qty) sum_qty From ( Select 'a' key,444 qty from dual union all Select 'a' key,111 qty from dual union all Select 'b' key,5000 qty from dual ) )

関連するQ&A

  • 副照会を簡単に使いまわせますか?

    たとえば、次のSQLがあったとして、 select キー1, キー2, sum(金額) (  select A.キー1 , A.キー2 , A.金額   from (select * from ~ where ...) A  union all  select '' , A.キー2 , A.金額   from (select * from ~ where ...) A  union all  select A.キー1 , '' , A.金額   from (select * from ~ where ...) A  union all  select ''   , '' , A.金額   from (select * from ~ where ...) A ) group by キー1, キー2 一番内側の副照会は、 (select * from ~ where ...) A は、4箇所とも同じSQL文で、とても長いのですが 2箇所目以降は、1箇所目と同じSQL文ということで 記述を省けたりするような構文があったりしないでしょうか? そこを、ビューにしろといわれるとその通りなのですが ビューにしたくないです。(プログラムで動的にここの副照会部分を パラメータに応じて作っているので、ビューにするとビューがいくつも できて、きりがない) Oracle9iで、利用しています。

  • ユニオンクエリ 「FROM 句の構文エラーです。」

    ユニオンクエリで複数のテーブルをつなげたいのですが SELECT * FROM 2003(T_案件) UNION ALL SELECT * FROM 2004(T_案件); とすると、 「FROM 句の構文エラーです。」 となります。 二つのフィールドの名前や数やデータ型は一緒のはずです。 何がダメなのでしょうか?

  • JOIN使ってないのに、JOIN操作の構文エラーっ

    SELECT * FROM ( (select * from [table1]) union (select * from [table2]) ); なんでこれが「JOIN操作の構文エラーです。」ですか?

  • order by区の記述位置

    以下のようなsqlを書いた場合、 (入れ子になった内側でorderbyを記述している) 6行目に書いたorderbyの動作(ソートキーの降順に並ぶこと)は oracle,sql server等、各環境で保障されるのでしょうか? 以下の例ではうまく動作していたのですが(oracle) 入れ子が多くなった場合もうまくうごくのでしょうか? -------------------- select a.* from (   select a.ソートキー from テーブル a   union all   select a.ソートキー from テーブル b   order by ソートキー desc ) a -------------------- 自分は、order by は最後に書くものだと思っていたのですが、 たまたま上記のような入れ子になった内側でソートしているソースを見ることがあり みなさんにお話をうかがいたく質問させていただきました。 よろしくお願いいたします。

  • MySQLの構文のエラーについて

    私の質問を見て頂きましてありがとうございます。 以下のような取得結果のSQLを作りたいのですが、構文エラーが出ており困っております。 エイリアスをつけなくてはならない?ようだったので全ての副問い合わせにエイリアスを付けてみたりしたのですが、エラーがとれませんでした。 --元テーブルのデータ key name ------------------------------ 1 AA,AAA,BBB,BBBB,ZZZZZ 2 CCC,DDD,EE,FFFF --期待するSQL実行結果 COL1  COL2 ------------- AA 1 AAA 1 BBB 1 BBBB 1 CCC 2 DDD 2 EE 2 FFFF 2 ZZZZZ 1 SELECT col1, col2 FROM( SELECT col1, col2, (SELECT @i:=@i+1 FROM (select @i:=0)) AS rnk FROM( SELECT SUBSTR( name, CASE rn WHEN 1 then 1 ELSE INSTR(name, delm, 1, rn - 1) + 1 end ,CASE rn WHEN 1 THEN CASE INSTR(name, delm, 1, rn) WHEN 0 THEN LENGTH(name) ELSE INSTR(name, delm,1,rn)-1 end WHEN IFNULL(LENGTH(translate(name, delm || name, delm)), 0) + 1 then LENGTH(name) ELSE INSTR(name,delm,1,rn)-1-instr(name,delm,1,rn-1) end ) AS col1, key AS col2 FROM T_TEST_4, (SELECT ',' AS delm FROM dual) AS b, (SELECT rownum AS rn FROM all_catalog) AS c WHERE rn <= IFNULL(LENGTH(REPLACE(name,delm || name, delm)),0) + 1 ) ) WHERE rnk = 1 ORDER BY col1; 以上、回答をご存じの方、ご回答を宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • date '0001-01-01'からの日数

    Oracle XEとC#4とでは、0001/1/1からの日数に少し差があるみたいなんです。何ででしょうか? Oracle > select '0101' n, date '0101-01-01' - date '0001-01-01' m from dual > union all select '0201' n, date '0201-01-01' - date '0001-01-01' m from dual > ~ > union all select '2001' n, date '2001-01-01' - date '0001-01-01' m from dual > union all select '2010' n, date '2010-01-01' - date '0001-01-01' m from dual C# > static void Main(string[] args) { >   DateTime z = new DateTime(0, DateTimeKind.Utc); >   foreach (int i in new int[] { 101, 201, 301, 401, 501, 601, 701, 801, 901, 1001, >     1101, 1201, 1301, 1401, 1501, 1601, 1701, 1801, 1901, 1970, 2001, 2010, }) { >     TimeSpan s = new DateTime(i, 01, 01, 0, 0, 0, DateTimeKind.Utc) - z; >     Console.WriteLine("{0:0000}{1, 10}", i, s.TotalDays); >   } >   Console.ReadLine(); > } | | C# | Oracle | 差 | | 0101/01/01 | 36,524 | 36,525 | -1 | | 0201/01/01 | 73,048 | 73,050 | -2 | | 0301/01/01 | 109,572 | 109,575 | -3 | | 0401/01/01 | 146,097 | 146,100 | -3 | | 0501/01/01 | 182,621 | 182,625 | -4 | | 0601/01/01 | 219,145 | 219,150 | -5 | | 0701/01/01 | 255,669 | 255,675 | -6 | | 0801/01/01 | 292,194 | 292,200 | -6 | | 0901/01/01 | 328,718 | 328,725 | -7 | | 1001/01/01 | 365,242 | 365,250 | -8 | | 1101/01/01 | 401,766 | 401,775 | -9 | | 1201/01/01 | 438,291 | 438,300 | -9 | | 1301/01/01 | 474,815 | 474,825 | -10 | | 1401/01/01 | 511,339 | 511,350 | -11 | | 1501/01/01 | 547,863 | 547,875 | -12 | | 1601/01/01 | 584,388 | 584,390 | -2 | | 1701/01/01 | 620,912 | 620,914 | -2 | | 1801/01/01 | 657,436 | 657,438 | -2 | | 1901/01/01 | 693,960 | 693,962 | -2 | | 1970/01/01 | 719,162 | 719,164 | -2 | | 2001/01/01 | 730,485 | 730,487 | -2 | | 2010/01/01 | 733,772 | 733,774 | -2 | もしかして、どこか間違ってますか?

  • UNION ALLのように順番がありNULLを返す方法

    SQL初心者です。ACCESSデータベースに対するクエリを書いているのですが、 条件を配列として、その配列の順番に応じたSELECT文を書きたいのです。 SELECT * FROM access_db WHERE ID = '条件' UNION ALL SELECT * FROM access_db WHERE ID = '条件' UNION ALL SELECT * FROM access_db WHERE ID = '条件' UNION ALL... といった具合にSQL文を作成しているのですが、これでは見つからない条件がある場合に、行が繰り上がり条件を格納した配列とはずれが生じてしまいます。 見つからなかった場合にNULLまたはそれを表せる何かを抽出結果として組み込むことはできますか? SQL初心者のためUNION ALL程度しか近いものが見つけられなく、困っています。 どなたかよろしくお願いします。

  • テーブル結合について、下記SQLをANSI結合の書き方で表したい。

    テーブル結合について、下記SQLをANSI結合の書き方で表したい。 select * from (select key from A union select key from B union select key from C) X, A,B,C where X.key=A.key(+) and X.key=B.key(+) and X.key=C.key(+) このSQLをANSI結合の記述で書きたいのですが、 (+)での結合文になれておらず試行錯誤しております。 下記のようなのかなとは模索しておりますが、 手元に実行環境がなくわかりません。 また、要所気付く点などありましたら、ご指摘願います。 select A.*, B.*, C.* from (select key from A union select key from B union select key from C) X, LEFT JOIN A ON X.key=A.key LEFT JOIN B ON X.key=B.key LEFT JOIN C ON X.key=C.key

  • SQL文でエラーが出ます。

    MySQLの事で質問です。 テーブル1~4を結合してフィールド「comment」を検索 する時にフィールド「postDate」の降順でソートしたい のですがエラーが出ました。 「SQLコマンド」 select text from table1 union all select comment from table2 union all select comment from table3 union all select comment from table4 where match(commentIndex) against("検索ワード" in boolean mode) order by postDate desc; 試しに union all select comment from table2 union all select comment from table3 union all select comment from table4 の部分を削除して実行してみた所、成功しました。 後、order by postDate desc;のみ削除した場合でも成功しました。 エラーの内容はこれです↓↓ Unknown column 'postDate' in 'order clause' フィールド「postDate」は存在します。 (varchar型何ですが、それがいけないと思い date型やdatetime型と変えてみましたがダメでした) 何とかソートしたいのですがどうすればいいのでしょうか?

    • ベストアンサー
    • MySQL
  • ユニオンクエリでWHERE句を使うのは不可能でしょうか?

    アクセス2003です。 (select * from Q1) UNION ALL (select * from Q2) UNION ALL (select * from Q3); WHERE (((番号) Like "*001")); としても 「SQLステートメントの後に文字が見つかりました。」 となってしまいます。 「番号」と言うフィールドは Q1、Q2、Q3どのクエリにもあり (select * from Q1) UNION ALL (select * from Q2) UNION ALL (select * from Q3); のみなら正常に動作します。 作成したユニオンクエリで「フィルタの対象」で「*001」と入力したらちゃんと思い通りに動作します。 ユニオンクエリで条件抽出は不可能でしょうか? よろしくお願いします。