問題タブ [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 - ANSI 92 再帰 SQL ステートメントが必要
現在、SQL Server SQL ステートメントを同等の ANSI 汎用ステートメントに変換していますが、WITH ステートメントを使用した再帰ステートメントに悩まされています。
この問題に集中するために、次のように問題を単純化します。
テーブルが 2 つある場合
報告単位
- col1: キー
- col2: ParentReportingUnitKey
施設
- col1: キー
- col2: ParentReportingUnitKey
この構造は、施設までのレポーティング ユニットの階層を記述しています。レポーティング ユニットは、0 .. 1 の直接の親レポーティング ユニットと 0 .. n の子レポーティング ユニットを持つことができます。
施設は、レポーティング ユニットにリンクする「リーフ」レコードです。
ANSI 92 の有効な SQL ステートメント (または、最悪の場合、Oracle、DB2、および SQL Server で動作するもの) を作成する必要があります。これは、階層の任意の場所にある特定のレポート ユニットに関連するすべての機能を返します。
例えば
- ReportingUnit R1 には ReportingUnit の子 R1.1 と R1.2 があります
- ReportingUnit R1.1 には子 R1.1.1、R1.1.2 があります
ReportingUnit R1.2 には子 R1.2.1、R1.2.2 があります
施設 F1 には、親報告単位 R1.1.1 があります。
- 施設 F2 には、親報告単位 R1.1.2 があります。
- 施設 F3 には、親報告単位 R1.2.1 があります。
- 施設 F4 には、親報告単位 R1.2.2 があります。
ReportingUnit テーブルには 0 ~ n レベルの再帰がある可能性があることを念頭に置いて、パラメーター ReportingUnit=R1 を指定して SQL ステートメントから 4 つの機能すべてを返すにはどうすればよいでしょうか?
sql - SQL ANSI-92 標準が ANSI-89 よりも採用されていないのはなぜですか?
私が働いたすべての会社で、人々がまだ ANSI-89 標準で SQL クエリを書いていることがわかりました。
ANSI-92 標準ではなく:
このような非常に単純なクエリの場合、読みやすさに大きな違いはありませんが、大きなクエリの場合、結合条件をグループ化してテーブルを一覧表示すると、結合で問題が発生する可能性のある場所を簡単に確認できることがわかります。すべてのフィルタリングを WHERE 句に保持しましょう。言うまでもなく、外部結合は Oracle の (+) 構文よりもはるかに直感的です。
私は ANSI-92 を人々に広めようとしていますが、ANSI-89 よりも ANSI-92 を使用することで具体的なパフォーマンス上の利点はありますか? 自分で試してみますが、ここにある Oracle のセットアップでは、EXPLAIN PLAN を使用できません。人々がコードを最適化しようとするのは嫌ですよね?
database - データベースに依存しないアプリケーションをどのように作成しますか?
上司から、ANSI SQL だけを記述してデータベースに依存しないようにするように言われました。しかし、ANSI SQL と完全に互換性のあるデータベースはないため、それほど簡単ではないことを知りました。SQL コードを変更せずにデータベース システム間で移植できることはめったにありません。
プログラムデータベースを独立させるために、人々がさまざまな方法を行っているのを見ました。例えば:
- SQL ステートメントをリソース ファイルに外部化します。
- さまざまなデータベースをサポートするために、多くのプロバイダー クラスを記述します。
- 単純な SQL のみを記述し、高度な関数や結合は避けてください。
あなたは常に「任意のデータベース対応」のコードを書いていますか? それとも必要な場合のみ行いますか?はいの場合、どのようにそれを達成しますか?
sql - コマンドラインから SQL の有効性をテストする方法は?
SQL クエリが有効な ANSI SQL であることを確認するための優れたツールはありますか? オプションで、どの DBMS がそれを解釈できませんか? http://developer.mimer.com/validatorを見つけましたが、コマンド ライン ツール、できればオープン ソースがあるかどうか疑問に思っていました。
sql - DateTime 値を管理する Sql Ansi
マルチデータベースシステムを開発しています。
2 つの日付の差を秒単位で求めます。SQL Server
では: MySqlで:
私の質問:
Sql
Ansi には DateTime 値を管理する機能がありますか? ie: すべてのデータベースに共通の日時関数はありますか?
DATEDIFF(second,stardate,enddate)
TIME_TO_SEC(TIMEDIFF(stardate,enddate))
sql - ANSI SQLのみを使用してページングする方法はありますか?
知っている:
- ファイヤーバード:
FIRST
とSKIP
; - MySQL
LIMIT
:; - SQL Server
ROW_NUMBER()
:;
誰かが結果ページングを実行するSQLANSIの方法を知っていますか?
sql - ANSI SQL を学ぶのに最適なリソースは何ですか?
「基本的な SQL」という意味ではありませんが、仕様と、優れたデータベース (SQL Server、Oracle など) 間の仕様と実装の違いを強調しています。
sql - 自動インクリメント フィールドのないデータベースの自動インクリメント フィールド
MS Sql Server では、自動インクリメント フィールドを簡単に作成できます。私のシステムでは、主キーに自動インクリメント フィールドを使用するのをやめ、現在は Guid を使用しています。それは素晴らしかったです、私はその変更で多くの利点を持っています. しかし、別の非主キー フィールドでは、「ソフト オートインクリメント」を実装する必要がありました。私のシステムは DB に依存しないため、C# でプログラムによって autoinc 値を作成します。
自動インクリメントのないデータベースの自動インクリメント フィールドの解決策について教えてください。どのような解決策を使用し、その理由は何ですか? これについていくつかのSql Ansiステートメントがありますか? 私のC#から直接生成するのは、より良い解決策ですか?
PS:テーブルから max(id)+1 を選択することは、実際には同時実行に適していないことを知っています...
mysql - MYSQL LIMIT キーワードに代わる ANSI SQL はありますか?
MYSQL LIMIT キーワードに代わる ANSI SQL はありますか?
LIMIT キーワードは、SELECT によって返される行数を制限します。例:
2 行を返します。
最初の 10 行から 2 行を返します。
sql - すべての SQL 地理空間実装はデータベース固有のものですか?
私のチームは、さまざまなデータベース プラットフォームが提供する地理空間機能を調査しています。
すべての実装はデータベース固有のものですか?それとも ANSI SQL 標準、または提供されている、または将来提供される予定の同様のタイプの標準がありますか?
実装されたコードを可能な限りデータベースにとらわれないようにしたいのでお願いします (私たちのプロジェクトは ANSI SQL 標準で書かれています)。
将来、この機能を標準化する計画はありますか?