0

おそらく私が解決策を見つけることができないのは、私が本当に探しているものがわからないためです!うまくいけば、私は答えのためにそれを十分に説明することができます。私は3つのテーブルを持っています(1つのビューと2つのテーブル)。ビューには必要なすべての詳細が含まれています。これをユーザーテーブルと呼びましょう。表2と表3には、ユーザーの最後のログインが含まれています(2つの別個のシステム)。結果セットに、表2と3のそれぞれからの最後のログインでビューに各ユーザーを表示したいと思います。従業員IDと照合しています。私が抱えている問題は、テーブル2と3にはログオンしたことがないため、すべての従業員IDがリストされていないことです。したがって、テーブル1と2を内部結合すると、結果セットにはビューからすべてのユーザーが表示されるのではなく、一致したユーザーのみが表示されます。ただし、ビュー内のすべてのユーザーを返す必要があります。ユーザーがログオンしたことがない場合(表2にない従業員ID)は、空白またはその他のテキストを使用してください。

4

4 に答える 4

1

INNER結合は使用しないでください。代わりにOUTER結合を使用する

たとえば(テーブルと列の名前は架空のものです。。

SELECT 
  u.*, t1.logindate, t2.logindate
FROM 
  usertable u
LEFT OUTER JOIN table1 t1 ON u.id = t1.uid
LEFT OUTER JOIN table2 t2 ON u.id = t2.uid

ドキュメントの引用

内部結合は、結合条件に一致する両方のテーブルからの行が少なくとも1つある場合にのみ、行を返します。内部結合は、他のテーブルの行と一致しない行を削除します。
ただし、外部結合は、FROM句で指定されたテーブルまたはビューの少なくとも1つからすべての行を返します。ただし、これらの行がWHEREまたはHAVINGの検索条件を満たす場合に限ります。
すべての行は、左側の外部結合で参照される左側のテーブルから取得され、右側のテーブルのすべての行は、右側の外部結合で参照されます。両方のテーブルのすべての行は、完全外部結合で返されます。

于 2012-12-21T21:13:51.913 に答える
0

あなたが探しているのは左外側結合と呼ばれています。

このようなもの:

select u.*, s1.*, System2Login.*
from users u
  left outer join System1Login s1 on u.EmployeeID = s1.EmployeeID
  left outer join System2Login s2 on u.EmployeeID = s2.EmployeeID

system1およびsystem2からのデータ(利用可能な場合)とともに、テーブル内のすべての行を返す必要があります。users

于 2012-12-21T21:15:48.787 に答える
0
SELECT <whatever columns you need>
FROM Table1 t1
LEFT OUTER JOIN Table2 t2
ON t1.employeeID = t2.employeeID
LEFT OUTER JOIN Table3 t3
ON t1.employeeID = t3.employeeID
于 2012-12-21T21:15:55.193 に答える
0

あなたは「外部結合」が何をするかを説明しています。LEFT OUTER JOINの代わりに(またはRIGHT)を使用するINNER JOINと、2番目のテーブルに一致するものがない場合でも、最初のテーブルの結果が表示されます。

こちらをお読みくださいhttp://en.wikipedia.org/wiki/Join_(SQL)#Outer_joins

于 2012-12-21T21:17:09.813 に答える