11

まったく同じ列を含む 4 つのテーブルがあり、4 つすべてのビューを作成して、それらをまとめてクエリできるようにしたいと考えています。

これは可能ですか?

(退屈な理由で、それらを組み合わせることができない/許可されていないため、これは無関係になります!)

4

7 に答える 7

17

同じ列名を持つことに加えて、同じ列に同じデータが含まれていると仮定すると、それらすべてのテーブルの和集合であるビューを作成する必要があります。

次のようなものはうまくいくはずですが、私のSQLは錆びています:

(CREATE VIEW view_name AS
(SELECT * FROM table1
UNION
SELECT * FROM table2
UNION
SELECT * FROM table3));
于 2008-12-09T12:28:43.390 に答える
13

複数のテーブルに存在する可能性のある一意の行を保持するために、「ユニオンオール」を使用する必要がある場合があることに注意してください。標準ユニオンは重複を削除します。

于 2008-12-09T12:36:00.880 に答える
9

データが UNION に基づいて返されることを期待しているのか、列を個別に含むビューとして返されることを期待しているのか、クエリから判断するのは困難です。これは明らかに効果があります。

次のサンプルを検討してください。

TableA
ID  Name   RelatedID
1   John   2
2   Paul   1

TableB
ID  Name   RelatedID
1   Ringo  1
2   George 1

TableC
ID  Name  RelatedID
1   Bob   1

TableD
ID  Name  RelatedID
1   Kate  NULL

次に、これに対して次のクエリを実行します。

SELECT ID、名前 FROM TableA UNION ALL SELECT ID、名前 FROM TableB UNION ALL SELECT ID、名前 FROM TableC UNION ALL SELECT ID、名前 FROM TableD

これにより、次の出力が得られます。

1 John
2 Paul
1 Ringo
2 George
1 Bob
1 Kate

これはあなたが求めているものですか?その場合は、UNION クエリを使用します。

ここで、目的の効果が関連データの個別のビューを持つことである場合は、次のようなことを行う必要がある場合があります。

SELECT A.ID MasterID, A.Name MasterName, 
       B.ID BandID, B.Name BandName, 
       C.ID BlackadderID, C.Name BlackadderName
       D.ID BlackadderRealID, D.Name BlackadderRealName
FROM
  TableA A
INNER JOIN
  TableB B
ON
  A.RelatedID = B.ID
INNER JOIN
  TableC C
ON
  B.RelatedID = C.ID
INNER JOIN
  TableD D
ON
  C.RelatedID = D.ID

これにより、次のデータ ビューが表示されます。

MasterID  MasterName  BandID  BandName BlackAdderID BlackAdderName  BlackadderRealID  BlackadderRealName
1         John        2       George   1            Bob             1                 Kate
2         Paul        1       Ringo    1            Bob             1                 Kate
于 2008-12-09T13:23:32.547 に答える
2

ユニオンを使用します。 ここに説明があります

于 2008-12-09T12:27:54.110 に答える
2

ユニオンステートメントを使用する

select * from table1
union 
select * from table2
union
select * from table3
于 2008-12-09T12:28:03.657 に答える
2

それらを結合すればできます(各レコードがどのテーブルから来たかについてのインジケータを含めることをお勧めします):

select   table1.column1, 1 as TableNumber
from     table1

union

select   table2.column1, 2 as TableNumber
from     table2

.. etc ..
于 2008-12-09T12:30:19.067 に答える
2

重複する行を特に除外したい場合を除き、UNION ではなく UNION ALL を使用します。UNION は単独で実行に時間がかかり (重複を見つけるための並べ替えのため)、重複する行を削除します。

于 2008-12-09T12:51:57.353 に答える