-1

左外部結合で結合する2つのテーブルがあります

従業員

Employeed_Id    Employee_Name   Location_id

1               David           1
2               Andrew          2
3               Mike            3
4               steve           4

Employee_profile

profile_id     profile_name   location_id  profile_location
1              manager           1          NYC
2              accountant        2          Jersey
3              engineer          1          Mexico
4              trainer           3           Boston

これは、場所に基づいてすべての従業員を取得するために必要な一般的なクエリです。ここで、profile_location は一意です。

問題は、アプリケーションの一部で profile_location が必要ないことです。したがって、上記のテーブル間の外部結合は必要ありません。

外部結合で profile_location に入力値がない場合に正常に機能するように、クエリを作成する方法。

以下は私のクエリです:

select e.Employee_Name 
from Employee e,
     Employee_profile ep 
 where e.location_id (+) = ep.location_id
 and ep.profile_location='xxxxx'
4

2 に答える 2

3

渡されたものと一致するレコードを返しprofile_locationたいが、場所が存在しない場合にすべてのレコードも返したい場合は、次のようなものを使用できます。

select distinct e."Employee_Name"
from Employee e
left join Employee_profile ep 
  on e."Location_id" = ep."location_id"
where ep."profile_location" = 'xxx'
    or not exists (select ep1."profile_location" 
                   from Employee_profile ep1
                   where  ep1."profile_location" = 'xxx')

デモで SQL Fiddle を参照してください

存在しない値を渡すと'xxx'、結果は次のようになります。

| EMPLOYEE_NAME |
-----------------
|         David |
|        Andrew |
|         steve |
|          Mike |

'NYC'結果を渡すと、次のようになります。

| EMPLOYEE_NAME |
-----------------
|         David |
于 2012-11-29T20:35:52.810 に答える
0
select e.Employee_Name 
from Employee e,
     Employee_profile ep 
 where e.location_id (+) = ep.location_id
 and (ep.profile_location='xxxxx'
   Or ep.profile_location is null)
于 2012-11-28T21:54:26.503 に答える