0

関連する他のスレッドを検索しましたが、UNION や OUTER JOIN を探しているとは思えません。私がやろうとしていることは、理論的には非常に単純です。2 つの異なるデータベースに 2 つのテーブルがあり、どちらもほぼ同じデータを持っています。比較できるようにまとめてみました。フィールド名は異なりますが、データは非常に似ています。

次のようなものを想像してください。

テーブル「フー」:

 id  first_name  last_name      dept_name
+---+----------+---------------+-------------+
|  1|Bob       |Boberson       | Accounting  |
|  2|Steven    |McStevens      | Sales       |
|  3|Jane      |Janeston       | Support     |
+---+----------+---------------+-------------+

テーブル「バー」:

 person_id  first      last            department_id
+----------+----------+---------------+--------------+
|         1|Bob       |Boberson       |             2|
|         2|Doug      |Dugger         |             5|
|         3|Jane      |Janeston       |             3|
+----------+----------+---------------+--------------+

そして、私はこのようなものに終わろうとしています:

 person_id  first      last            department
+----------+----------+---------------+--------------+
|     foo_1|Bob       |Boberson       | Accounting   |
|     foo_2|Steven    |McStevens      | Sales        |
|     foo_3|Jane      |Janeston       | Support      |
|     bar_1|Bob       |Boberson       | Accounting   |
|     bar_2|Doug      |Dugger         | IT           |
|     bar_3|Jane      |Janeston       | Support      |
+----------+----------+---------------+--------------+

'as' を使用して列名を変更し、さまざまなフィールドに対して concat を使用し、適切な結合を行って 'department' フィールドに入力することで、2 つのテーブルを互いに似たものにするのは簡単です。しかし、「結合」してそのロジックを維持することはできません。テーブルごとに select ステートメントを実行する必要があります。ここにはおそらく簡単な解決策がありますが、私はそれを見ていません。

編集:あなたは正しいです、これはUNIONのかなり標準的なケースです。UNIONS は何らかの理由で常に列を追加すると考えていました。ありがとう。

4

2 に答える 2

1

これはUNIONとまったく同じように見えます

SQL Fiddleを見てください。部門 ID の検索を気にしませんでしたが、これで基本的な考え方が得られるはずです。

于 2013-05-07T20:52:47.657 に答える
1

重複した名前を削除したくない場合は、1 つのクエリで両方のテーブルからデータを取得する場合に使用できると思いますUNION。クエリの一部としてテーブル名を取得して、必要に応じて person_id のプレフィックスを付けることができます。

これにはテスト/改善が必要ですが:

(SELECT foo AS table, f.id AS person_id, f.first_name AS first, f.last_name AS last, f.dept_name FROM foo AS f)
UNION
(SELECT bar AS table, b.person_id, b.first, b.last, FROM bar AS b)
于 2013-05-07T20:44:30.237 に答える