2016-07-15 61 views
0

SQL Server:試圖連接3個表(一個表被重複),人員和約會。我想回到他們有A型的任命所有的人,但還沒有我在哪裏越來越糊塗B或C.SQL Join 3個表返回,其中記錄在一個表中不匹配

SELECT DISTINCT p.first, p.last 
FROM people p 
JOIN appt a ON a.pkid = p.pkid 
JOIN appt s ON s.pkid = p.pkid 
WHERE 
    a.kept = 'SomeValue' 
    AND a.appt_type = '9999999' 
    AND (s.appt_type <> '88888888' OR s.appt_type <> '8888888888') 

類型的預約,做我必須做一個選擇進入,或者做我需要一個不同類型的連接?

+0

我沒有看到任何A/B/C聘任類型,但你的意思是使用's.event_id' – dbmitch

+0

@dbmitch是......謝謝你指出,我糾正了原來的問題。 – DDulla

+0

如果yoiu希望所有條件都成立 - 將「OR」更改爲「AND」(並且不需要括號,但它們不會傷害到您) – dbmitch

回答

0

使用existsnot exists

select p.* 
from people p 
where exists (select 1 
       from appt a 
       where a.pkid = p.pkid and a.kept = true and 
        a.appt_type = '9999999' 
      ) and 
     not exists (select 1 
        from appt s 
        where s.pkid = p.pkid and 
         s.appt_type in ('88888888', '8888888888') 
       ); 

注:我不停的邏輯等同於你的問題,但SQL Server不能識別true

+0

使用exists且不存在時,我無法從約會表(例如:select a.appt_type);我必須做一個加入才能夠選擇它嗎? – DDulla

+0

@DDULLA。 。 。你的'select'子句沒有'appt'中的任何列。 –

0
SELECT DISTINCT p.first, p.last 
FROM people p 
JOIN appt a ON a.pkid = p.pkid 
WHERE a.kept = true 
AND a.appt_type='9999999' 
AND 
not exists (select 1 from appt s 
       where s.pkid = p.pkid 
       AND (s.appt_type = '88888888' OR 
       s.event_id = '8888888888') 

您沒有明確給出要求。但是你正在看這樣的事情。

0

這裏是另一種方式

SELECT DISTINCT p.first, p.last 
FROM people p 
JOIN appt a ON a.pkid = p.pkid 
left JOIN appt s ON s.pkid = p.pkid and (s.appt_type = '88888888' OR s.event_id = '8888888888') 
WHERE 
a.kept = true AND a.appt_type='9999999' AND 
s.event_id is null 
相關問題