2016-04-10 5 views

答えて

0

私はあなたが1つのクエリを意味すると信じています。私は彼らを「参加」することなく、単一のクエリで複数のテーブルのデータを抽出するための考えることができる2つの方法があります。

拳あなたはまた、「クロス参加」んでき組合

SELECT A, B, C FROM Table1 
UNION 
SELECT X, Y, Z FROM Table2 

であります

SELECT Table1.A, Table1.B, Table1.C, Table2.X, Table2,Y, Table2,Z 
FROM Table1, Table2 

このように、あるテーブルから他のテーブルへの関係はわかりません。つまり、のtable1のすべての行がtable2のすべての行と結合されます。

これは私の経験では、これはSQLの新しいプログラマが行う最も一般的な間違いです。ジョインを意味するときにクロスジョインを行い、GROUP BYまたはDISTINCTを実行して、必要な結果を得ます。これは非常に非効率的です!

ただし、テーブルの1つに行が1つしかない場合は、クロス結合が有効です。これらの値を他のテーブルのすべての行に追加します。基本的には、すべての行の列に対して単一の値セットを選択しています。あなたはすべての行が最大の日付を持つようにしたい場合は同様

(これは多くの場合、レポートに行われます)

SELECT * 
FROM Table1, (SELECT MAX(updatedate) as Max_Update FROM Table1) AS MaxDate 
+0

はお客様にホーガンをありがとう! – Justin

+0

@Justin - yw、編集を確認して、クロスジョインについての使用上の注意を追加しました。 – Hogan

0

必ずしも、連合のような他のオプションがあるわけではありません。

SELECT customerNumber id, contactLastname name 
FROM customers 
UNION 
SELECT employeeNumber id,firstname name 
FROM employees 

は、上記の例では、あなたが参加するうちに、複数のソースからデータを取得するために複数のクエリなどを実行することができ、他の時間がありますthis. から取るです。それはあなたが何をしたいかによって決まります。しかし、参加は非常に一般的な、おそらく最も普及しているアプローチです。

関連する問題