問題タブ [ansi-sql]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - ANSISql2003字句解析間隔
私自身の利益のために、ANSISQLLexerを作成しています。具体的には、ISO / IEC 9075-2:2003(E)に準拠しようとしています。トークンの段階で、あいまいな問題が発生しました。
語彙要素セクションでは、間隔文字列を次のように定義します。
例:「30」
30はオプションなしの<年の値>ですか、それとも<月の値>ですか?
理論的には次のように書くことができます:SELECT '30'
YearsValueトークンとMonthsValueトークン(クラス)を作成しました。ただし、あいまいさは問題であり、両方に一致します。ISO /IEC9075のパート1またはパート2で複数の一致を具体的に扱っているものは見当たりません。
誰かがこれが仕様のどこで処理されているかを指摘できますか、それとも左から右に想定されていますか?
誰かが尋ねる前に、私はSQLレクサーを書きたいので、これを行っています。それは学校のためではなく、自分自身を教育するための何かです。GOLDもANTLRも使いたくない。
sql - SQL グループから最初に一致する行を取得します
次のような投影があるとします。
次の最初のリレーションを返すにはどうすればよいですか。
つまり、各画家が最初に描いた絵..
ANSI SQL のみ
sql - 実際の開始日と終了日を維持しながら、同日のドロップ/追加を除外する
製品へのサブスクリプションのステータス更新を示す表があります。サブスクリプションの開始時にレコードがテーブルに挿入され、サブスクリプションの終了時にそのレコードが終了日で更新されます。私たちのシステムの 1 つ (どのシステムかはわかりません) は、サブスクリプションを終了してから再び開始する (新しいレコードを作成する) 「同日ドロップ/追加」を行うことがあります。そのため、実際には何も変更されていないにもかかわらず、同じ購読者 ID が複数のレコードに関連付けられます。
サンプルデータは次のとおりです。
この男は1/11に始まり、1/20に終わった。レコード 2 と 3 はシステムによって挿入されました (同日ドロップ追加ですが、実際にはそうではありませんでした)。レコード 4 は、19 さんが後で開始した別のサブスクリプションです。
各個別のサブスクリプションの最初の (実際の) レコードのみを解決しようとするコードがいくつかありますが、max() を使用してサブスクライバーごとにグループ化しないと、実際の終了日を見つけることができません。もちろん、1/11 - 1/31 と 1/30 - 1/31 の 2 つのサブスクリプションが表示されますが、これは誤りです。
このパターンを次のような 2 つのレコードに解決しようとして、私は頭を悩ませています。
これは Teradata にありますが、単なる ANSI SQL だと思います。
sql - 結果リストの先頭に指定されたレコード
タスク: 結果リストの一番上で指定されたレコードを選択する
私の醜い変種:
ansi
クエリバリアントのほかにもmysql
、私にとって非常に興味深いでしょう
sql - 標準のSQLブール演算子ISvs.equals(=)演算子
SQLのWikipediaページには、SQLのブール論理に関するいくつかの真理値表があります。[1]ウィキペディアのページはSQL:2003標準を提供しているようです。
等号演算子(=)の真理値表は、SQL:2003ドラフトのIS演算子とは異なります。
また、ウィキペディアの記事には、「IS NULL」(<null述語>)は特殊なケースであると記載されています。
SQL:2003には、AND、NOT、ORなどの通常の演算子である「IS」演算子があるようです。ただし、<null述語>はまだ存在します。
ISが通常のブール演算子であるのに<null述語>があるのはなぜですか?型の強制なしにブール値以外の値で「ISNULL」構文を使用できることを確認するためですか?「=NULL」を使用することはお勧めしませんか?
SQL:2011標準の動作は異なりますか?
[1]:SQLに関するウィキペディア
[2]:SQL:2011ドラフトPDFページ335
[3]:SQL:2003ドラフト PDFページ397
sql - IS DISTINCT FROM と IS NOT DISTINCT FROM を書き換えるには?
サポートされていない Microsoft SQL Server 2008R2 などの SQL 実装で、標準のIS DISTINCT FROM
and演算子を含む式をどのように書き換えますか?IS NOT DISTINCT FROM
sql - 「INDEX」は有効な SQL ANSI ISO 標準キーワード/予約語ですか?
「INDEX」がANSI SQLのキーワードであるかどうかについて調査しましたが、特に2008年と2011年の標準ではうまくいきませんでした。
これが有効な ANSI ISO SQL キーワードであるかどうかは誰にもわかりますか?
sql - SQL:DATE型の列を持つ集計関数
私は(テストで)どの集計関数がDATE型の列に適用できるかについての質問に出くわしました。したがって、私が理解しているように、COUNTは行数をカウントするだけで、MINとMAXは最も早い/最も遅い日付を返します。ただし、SUM関数とAVG関数については少し混乱しています。DATE値をintに変換し、それらのintの合計/平均を計算するだけですか?それとも私はここで間違っていますか?とにかく、この動作はSQLのすべての実装で一貫していますか?前もって感謝します。
sql - SELECT *ステートメントの列の順序 - 保証されていますか?
ORM (sqlalchemy) を使用して PG データベースからデータを取得しています。手作りの SQL ステートメントですべてのテーブル列名を指定することは避けたい*。
これまでのところ、返された列は、db テーブルの作成に使用された DDL ステートメントの順序になっていると想定しています。これまでのところ、これは機能していますが、これが単なる運なのか、それとも (ANSI) SQL 仕様で具体的に対処されているのかを知りたいです。
つまり、ANSI SQL (およびおそらくデータベース) は、SELECT *
ステートメントで返される列の順序を保証しますか?
バックエンドデータベースとしてPostgreSQL 8.4を使用しています
- はい、ORM で手作りの SQL ステートメントを使用すると、ORM の目的が損なわれることは承知していますが、...
sql - Sybase *= 同じ内部テーブルに対して 2 つの異なる外部テーブルを持つ Ansi 標準へ
いくつかのレガシー手続き型コードを移行しようとしています。同じ結果を生成するための ANSI 標準構文を理解するのに苦労しています。
以下は、私が試した多くの組み合わせの1つです。2 番目の結合の内部テーブルは何ですか。それは最初の結合からの出力ですか、それともソース テーブルですか。
変更するコードがたくさんあるので、助けてください。
元の SQL ステートメント
私の回心
以下は、SQL テーブルの定義とサンプル データです。