WITH句で複数テーブルを定義する方法を知りたいです。
どこかのサイトで、複数テーブルを定義するには、以下のような
方法にて実現できる旨の記事を目にしました。(withでの宣言テーブル間を「,」で区切る)ですが、「'.' 付近に不適切な構文があります。
」のようにエラーがメッセージ欄に表示されます。
------------------------------------------------------------
WITH a (code, cnt) as (
select code, count(*) from abc
where a is null
group by documentcode),
b (ttr.documentcode, cnt) as (
select ttr.documentcode, count(*) from abc tr inner join def ttr with(nolock)
on tr.seqno = ttr.seqno
where SendTime is null
group by documentcode )
select * from a cross join b;
------------------------------------------------------------
ご存知の方でコメント頂ける方、お手数お掛けしますが、
宜しければ教えて下さい。
No.3ベストアンサー
- 回答日時:
>#1さんの指摘では、ttrがスコープ外?だったから
>いけなかったのでしょうか。
迷走してませんかね?
>b (ttr.documentcode, cnt) as (
CTEで「表名を b 、列名を ttr.documentcode と定義する」という指定になっていますよ?
もし、仮にそういった列名を使いたいなら、標準SQLでは " (二重引用符)、SQL Serverなどは [ ] で囲みますよね?
回答ありがとうございます。
ごちゃごちゃしていましたが、今、整理できました。
表b (表bの列定義) as (
表bとなるクエリ
)
なので、bの列定義となる列名はなんでもよく、
ただ、私の場合、ttr.documentcodeとなっていたので
その定義の仕方は、よくないでしょ、ってことで
エラーとなっていたんですね。
No.2
- 回答日時:
#1さんの指摘部分”だけ”、修正したのですか?
>WITH a (code, cnt) as (
> select code, count(*) from abc
> where a is null
> group by documentcode),
abc表に、code列はあるのですか?
仮にあっても、documentcodeでグループ化しているのだから、おかしいですよね?
>b (ttr.documentcode, cnt) as (
↓
b (documentcode, cnt) as (
としたのでしょうかね?
>select ttr.documentcode, count(*) from abc tr inner join def ttr >with(nolock)
>on tr.seqno = ttr.seqno
>where SendTime is null
>group by documentcode )
グループ化するdocumentcode列は、trとttrのどちらのを使えばいいか曖昧ですよね?
select句でttr.documentcodeを指定するなら、
group by ttr.documentcode
と指定することになりますよね?
おおお、、、、そうですね。。。
今回WITH句をはじめてつかったので、
そのせいだとばかり思っていました。
>>WITH a (code, cnt) as (
>> select code, count(*) from abc
>> where a is null
>> group by documentcode),
>abc表に、code列はあるのですか?
>仮にあっても、documentcodeでグループ化しているのだから、おかし
>いですよね?
上記については、
select documentcode, count(*) from abc
where a is null
group by documentcode
の間違いでした。すみません。
そのままコピペする訳にはいかず、多少クエリを
編集したのですが、その際にミスしました。
#1さんの指摘では、ttrがスコープ外?だったから
いけなかったのでしょうか。
また、、、そうですね。group by後のdocumentcodeに
ttr.をつけてませんでした。
指摘頂いた通り修正後、実行される事が確認できました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- PostgreSQL SQLで検索結果の記事を表示したい 1 2022/04/28 21:03
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- Oracle SQL update方法 2 2022/06/22 14:07
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracleのビュー作成時に「指定...
-
ORACLEで一番最初の結果だけを...
-
ある値以上の空き番の最小値を...
-
DB2でREPLACEによる文字列の置換
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
Oracle 2つのDate型の値の差を...
-
エクセルVBAで5行目からオート...
-
Accessでテーブルの値をテキス...
-
ACCESSで400以上のフィールドが...
-
Accessで数値型にNULLをInsert...
-
Accessのフィールド数が255しか...
-
Access テキスト型に対する指定...
-
ORACLEでLONG項目からCHAR項目...
-
ACCESSで和暦を西暦に・・・
-
他テーブルで一致する列から名...
-
Access IF文でテーブルに存在し...
-
作番ってどういう意味でしょうか?
-
Accessでテーブル名やクエリ名...
-
アクセス エラーを数値「0」に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Oracleのビュー作成時に「指定...
-
ROWNUMについて
-
ORACLEで一番最初の結果だけを...
-
Oracle SQLにて固定長でデータ...
-
抽出結果を1件ずつ次の抽出条件...
-
ある値以上の空き番の最小値を...
-
DB2でREPLACEによる文字列の置換
-
distinct で抽出したレコード件数
-
WITH句で複数テーブルを定義す...
-
P/L SQLで値が更新されない。
-
sqlplusで日本語入力
-
時間の重複を加味した連続時間S...
-
動的SQLでのDECODE
-
PL/SQL 複数件同じ値で更新す...
-
group by でselect
-
SQL文についての質問
-
ACCESS クエリーから件数取得
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
おすすめ情報