0

同じテーブルをそれ自体と比較して、ある従業員の場所を別の従業員と比較しようとしています。ある従業員が別の従業員から特定の場所にいる場合にのみ選択できるようにしたいと考えています。

テーブルはこんな感じ

StaffNo  LocoNo
1          1
1          2
1          3
3          2
3          3
3          4
4          1
4          2
5          2
5          3
6          1
6          2

譜表 1 と 4 を比較します。

結果は

StaffNo  LocoNo
1          3

内部結合と EXCEPT を試しましたが、うまくいかないようです。

4

4 に答える 4

1

MINUS / UNION ALLを使用した別のソリューション:

with 
  v_1 as (select locono from from table where staffid=1),
  v_2 as (select locono from from table where staffid=2)
select * from (
(select 1 staffid, locono from v_1
 minus
 select 1 staffid, locono from v_2
)
union all
(
select 2 staffid, locono from v_2
 minus
 select 2 staffid, locono from v_1
)) order by staffid, locono
于 2012-10-05T13:52:41.253 に答える
1

内部結合は、結合の両側が一致する場合にのみ結果を返します。違いを探しているので、外部結合が必要です。このような。

select 
    COALESCE(t1.staffid, t2.staffid) as staff,
    COALESCE(t1.locationid, t2.locationid) as location 
from
    (select * from table where staffid=1) t1
        full outer join
    (select * from table where staffid=4) t2    
        on t1.locationid = t2.locationid
where t1.locationid is null 
or t2.locationid is null
于 2012-10-05T13:43:19.553 に答える
1
SELECT StaffNo
     , LocoNo
  FROM Tbl A
 WHERE NOT EXISTS
      (SELECT 1
         FROM Tbl B
        WHERE A.StaffNo <> B.StaffNo
          AND A.LocoNo = B.LocoNo) 
于 2012-10-06T16:16:10.037 に答える
0
select staffno,locono from tbl where staffno in (1,4) and locono in
((select locono from tbl where staffno = 1
except
select locono from tbl where staffno = 4)
union 
(select locono from tbl where staffno = 4
except
select locono from tbl where staffno = 1))
于 2012-10-05T13:51:11.893 に答える