2017-04-11 69 views
-1
SELECT GUEST.FIRSTNAME,GUEST.LASTNAME, CHARGETYPE.DESCRIPTION 
FROM GUEST 
INNER JOIN CHARGES 
ON GUEST.GUESTID = CHARGES.GUESTID 
INNER JOIN CHARGETYPE 
ON CHARGETYPE.CHARGEID = CHARGES.CHARGEID 
WHERE CHARGES.CHARGEID IN ('07','03'); 

-Dean JOHNSON晚餐服務寫一個SQL查詢來顯示同時收費的客人的姓名?

-Dean JOHNSON晚餐服務

-Jane ADAMS晚餐服務

-Peter ADAMS晚餐服務

-Peter ADAMS晚餐服務

-JOHN SMITH晚餐服務

- 約翰史密斯晚餐服務

-Dean JOHNSON競技CHARGE

- 約翰史密斯競技CHARGE

輸出應該只顯示迪恩和約翰BOTH運動和晚餐服務費。有沒有簡單的方法來解決這個問題?

+1

不要破壞一篇文章,甚至是你自己的文章。你爲什麼要把它刪除? [因爲它是家庭作業,你想隱藏你可能得到的幫助](https://meta.stackoverflow.com/a/337003/266304)? –

+1

另外[正在玷污自己的帖子值得修改國旗](https://meta.stackoverflow.com/questions/306820/is-defacing-own-posts-worth-a-mod-flag)?對不起,斯帕奇 - 一旦你發佈它會留*張貼。快樂的家庭工作! –

回答

0

應該是非常簡單的使用複製加入

SELECT 
    GUEST.FIRSTNAME, 
    GUEST.LASTNAME, 
    CHARGETYPE.DESCRIPTION 
FROM GUEST 
INNER JOIN CHARGES 
    ON GUEST.GUESTID = CHARGES.GUESTID 
INNER JOIN CHARGETYPE c1 
    ON c1.CHARGEID = CHARGES.CHARGEID 
    and c1.CHARGEID = '07' 
INNER JOIN CHARGETYPE c2 
    ON c2.CHARGEID = CHARGES.CHARGEID 
    and c2.CHARGEID = '03' 
2

having條款使用count(distinct col)

select 
    guest.firstname 
    , guest.lastname 
from guest 
    inner join charges 
    on guest.guestid = charges.guestid 
    inner join chargetype 
    on chargetype.chargeid = charges.chargeid 
where charges.chargeid in ('07', '03') 
group by 
    guest.firstname 
    , guest.lastname 
having count(distinct charges.chargeid) = 2; 
0

我會的情況下加入到這一點,如果需要的話,你可以使用它作爲一個子查詢以過濾掉那些hadDinner = 1且isAnAthlete = 1的查詢:

SELECT GUEST.FIRSTNAME 
,GUEST.LASTNAME 
, sum(case when CHARGETYPE.DESCRIPTION = 'DINNER SERVICE' then 1 else 0 end) hadDinner 
, sum(case when CHARGETYPE.DESCRIPTION = 'ATHLETIC CHARGE' then 1 else 0 end) isAnAthlete 
FROM GUEST 
INNER JOIN CHARGES 
ON GUEST.GUESTID = CHARGES.GUESTID 
INNER JOIN CHARGETYPE 
ON CHARGETYPE.CHARGEID = CHARGES.CHARGEID 
WHERE CHARGES.CHARGEID IN ('07','03') 
Group by GUEST.FIRSTNAME 
,GUEST.LASTNAME; 
相關問題