[解決済み] 1つのPostgreSQLクエリで複数のWITHステートメントを使用するには?
2022-03-16 02:32:23
質問
私は、WITHステートメントを使用して、事実上複数のTEMPテーブルを宣言したいと思います。 私が実行しようとしているクエリは、次のようなものです。
WITH table_1 AS (
SELECT GENERATE_SERIES('2012-06-29', '2012-07-03', '1 day'::INTERVAL) AS date
)
WITH table_2 AS (
SELECT GENERATE_SERIES('2012-06-30', '2012-07-13', '1 day'::INTERVAL) AS date
)
SELECT * FROM table_1
WHERE date IN table_2
私が読んだのは
PostgreSQLのドキュメント
を複数使用することを研究しています。
WITH
という文がありますが、答えが見つかりませんでした。
どのように解決するのですか?
他のコメントで、2つ目のCommon Table Expression [CTE]の前にコンマがあり、WITHステートメントではありません。
WITH cte1 AS (SELECT...)
, cte2 AS (SELECT...)
SELECT *
FROM
cte1 c1
INNER JOIN cte2 c2
ON ........
実際のクエリでは、この構文はPostgreSql、Oracle、sql-serverで動作するはずですが、後者の方が一般的でしょう。
WITH
にセミコロン(
;WTIH
しかし、これは、一般的なSQLサーバーの人々(私も含めて)が、CTEが定義される前に終了させる必要がある前のステートメントを終了させないためです...
しかし、あなたは2つ目の構文上の問題があったことに注意してください。
WHERE
という文があります。
WHERE date IN table_2
は有効ではありません。なぜなら、実際には table_2 から値やカラムを参照していないからです。 私は
INNER JOIN
オーバー
IN
または
Exists
で動作する構文です。
JOIN
:
WITH table_1 AS (
SELECT GENERATE_SERIES('2012-06-29', '2012-07-03', '1 day'::INTERVAL) AS date
)
, table_2 AS (
SELECT GENERATE_SERIES('2012-06-30', '2012-07-13', '1 day'::INTERVAL) AS date
)
SELECT *
FROM
table_1 t1
INNER JOIN
table_2 t2
ON t1.date = t2.date
;
EXISTSを使用する場合は、Whereに実際のSELECTステートメントを記述する必要があります。
SELECT *
FROM
table_1 t1
WHERE t1.date IN (SELECT date FROM table_2);
の場合、IN は非常に問題です。
date
になる可能性があります。
NULL
ということで、もしあなたが
JOIN
であれば、私は
EXISTS
. ASは以下の通りです。
SELECT *
FROM
table_1 t1
WHERE EXISTS (SELECT * FROM table_2 t2 WHERE t2.date = t1.date);
関連
-
[エラー処理] [MySQL] [Err] 1241 - オペランドは 1 つのカラムを含む必要があります。
-
[解決済み] SQLサーバーでNULL = NULLがfalseに評価される理由
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] PostgreSQL コマンドラインユーティリティ: psql を終了する方法
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] PostgreSQLのユーザーパスワードを変更する方法を教えてください。
-
[解決済み] PostgreSQLで一重引用符で囲まれたテキストを挿入する
-
[解決済み】Mac OS XでPostgreSQLサーバーを起動するには?
-
[解決済み】SQL Server SELECT INTO @variable?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
org.postgresql.util.PSQLException: ERROR: リレーション "userinfo" の列 "loginid" が存在しません。
-
[解決済み] SQLサーバーでNULL = NULLがfalseに評価される理由
-
[解決済み] SQL Server : 列を行に変換する
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQL ServerでJOINを使用してUPDATE文を実行するにはどうすればよいですか?
-
[解決済み] Oracleの全テーブルのリストを取得しますか?
-
[解決済み] SQL Serverでストアドプロシージャ内のテキストを検索する
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み] 既存のカラムにIDを追加する
-
[解決済み] 複数の列に対してSELECT DISTINCTする方法(またはできる方法)は?