SQLServerおよびOracleとPythonからの内部結合クエリ

この男

次のようなクエリがあるとしましょう。

SELECT Oracle.Column1, SqlServer.Column1
FROM SqlServer
INNER JOIN Oracle
on SqlServer.ID = Oracle.ID

Cx_Oracleとpyodbcを使用して、Pythonでそれぞれのデータベースへのカーソル接続を確立しました。個々のクエリはうまく機能します。私ができるサブクエリ。しかし、OracleとSQLServerの両方への接続を必要とする内部結合を使用したこのクエリは失われます。これを分割したり、プログラムでアプローチしたりするにはどうすればよいですか?

私の現在のバージョンでは一時テーブルを作成していますが、これはSQL Serverでのみ機能し、Oracleでは機能しません。目標は、カーソルを使用してそれぞれのサーバーに接続することです(現在は達成できます)が、それではどうしますか?

完璧

単純に、ローカルテーブルであるかのようにリモートデータベース間でクエリを実行することはできません。データベース接続の各カーソル内で、そのユニバースは、指定した接続サーバー、スキーマ、またはカタログ/データベースに制限されます。それらのオブジェクト(テーブル、関数/プロシージャなど)のみが使用可能です。それ以上のものは認識されません。

そうは言っても、今日のほとんどのリレーショナルデータベースは、Oracleのデータベースリンク、SQL Serverのリンクサーバー、DB2のカタログ、Postgresの外部データラッパー、MySQLのフェデレーションストレージエンジン、MS Accessのリンクテーブル、SQLiteのATTACH(ただし他のSQLiteのみ)を含む外部サーバー接続をサポートしています。データベース)。

したがって、OracleまたはSQL Serverのいずれかでリモート接続を確立することを検討し、接続しているユーザーにアクセスが許可されている場合は、必要なJOINクエリを実行します。以下は、接続とクエリの非常に簡単な例です。適切な接続パラメータについて調査を行ってください。また、Oracleスキーマ(ユーザーのみ)はSQL Serverスキーマ(オブジェクトの名前空間コンテナー)とは異なることを忘れないでください。

オラクル

データベースリンクは、クライアントが1つの論理データベースとしてそれらにアクセスできるようにする2つの物理データベースサーバー間の接続です。

CREATE PUBLIC DATABASE LINK ... USING 'mssql_db';  -- TO BE RUN ONCE

SELECT o.Column1, s.Column1
FROM oracle_local_table o
INNER JOIN mssql_db.sql_server_remote_table s
  ON s.ID = o.ID

SQLサーバー

リンクサーバーを使用すると、OLEDBデータソースに対する分散型の異種クエリにアクセスできます。リンクサーバーが作成された後、このサーバーに対して分散クエリを実行でき、クエリは複数のデータソースからのテーブルを結合できます。

EXEC master.dbo.sp_addlinkedserver           -- TO BE RUN ONCE
       @server = N'oracle_server', 
       @srvproduct=N'...', 
       @provider=N'...', 
       @provstr=N'...'

SELECT o.Column1, s.Column1
FROM oracle_server..user.oracle_remote_table o
INNER JOIN sql_server_local_table s
  ON s.ID = o.ID

-- ALTERNATIVELY
SELECT o.Column1, s.Column1
FROM OPENQUERY (oracle_server, 'SELECT * FROM scott.oracle_remote_table') o
INNER JOIN sql_server_local_table s
  ON s.ID = o.ID 

上記の場合のPythonの代替手段は、難しすぎるか、高レベルの特権権限が必要です。

  • いずれかの側に一時テーブルを作成し、cursor.fetchおよびcursor.executeまたはcursor.executemany介してリモートテーブルレコードをダンプしてからJOINローカルでクエリを実行します。

  • 両方のテーブルをSQLiteデータベース(ディスクまたはメモリ内インスタンス)にインポートし、JOINクエリを実行します。注:Python 3では、sqlite3は標準ライブラリの一部であるため、Pythonインストールに付属しています。

  • Pythonのサードパーティモジュールであるpandasを使用して、両方のテーブルをデータフレームにインポートし、実行しますmerge(SQLのカウンターパートJOIN)。sqlalchemyとのインターフェースにより、パンダはを使用してデータベースへの1回の呼び出しでデータフレームをダンプすることもできますto_sql

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

SQL、内部結合、および結果のクエリ、可能ですか?

MYSQL:group byおよび内部結合を使用したMySQLクエリの最適化

SQLServerのOracle結合クエリ

.NETからのSQLServerおよびOracleとの接続

SQLクエリ結合と合計および月の並べ替え

結合式は内部結合および左結合クエリでサポートされていません

Oracleは、選択したクエリから現在の年と前の年および来年を取得します

結合とクエリのような結合-それらは同等ですか?

mysqlのmaxおよびwhere句を使用したサブクエリを使用した内部結合

行SQLServer2008の分割および内部結合の戻り文字列

SQLクエリの内部結合とOR

MS SQL Server:自己およびサブクエリからの合計数

2つの別々のクエリからの内部結合の結果

fromdateとtodateの間の値、およびfromdata、todateを取得するSQLServerクエリ

ユーザーテーブルおよびSQL自己結合からcreatedby、modifiedbyをクエリする方法

SQLクエリ構文の場合、結合およびグループ化

値を結合および連結するSQLクエリ

SQLServerの内部結合とGROUPBY

Linqの特定のクエリSQLServerの内部結合と同じことは実行されません

Mysqlクエリの複数の内部結合と左結合

MSSQLからOracleへの結合を使用したクエリ

postgresからOracleへのtraslateクエリ「削除結合」

結合を使用してテーブル2および3からテーブル1にデータを追加するためのMySQlクエリの問題

Mysql:サブクエリでの左結合と内部結合

内部結合を使用した更新クエリをvbaからSQLServerに変換する

SQLServerクエリでのANDおよびORの演算の順序

LEFT JOINおよびWHERE句の結果が見つからない場合に、MySQLクエリでNULL値を返す方法

OracleリクエストでのSQL更新内部結合の問題

OracleとSQLServerで同じクエリの結果が異なる

TOP 一覧

  1. 1

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    Ansibleで複数行のシェルスクリプトを実行する方法

  4. 4

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  5. 5

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  6. 6

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  7. 7

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  8. 8

    Chromeウェブアプリのウェブビューの高さの問題

  9. 9

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  10. 10

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  11. 11

    Reactでclsxを使用する方法

  12. 12

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  13. 13

    MLでのデータ前処理の背後にある直感

  14. 14

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  15. 15

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  16. 16

    mutate_allとifelseを組み合わせるにはどうすればよいですか

  17. 17

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

  18. 18

    テキストフィールドの値に基づいて UIslider を移動します

  19. 19

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  20. 20

    PowerShellの分割ファイルへのヘッダーの追加

  21. 21

    ソートされた検索、ターゲット値未満の数をカウント

ホットタグ

アーカイブ