2016-09-14 43 views
0

表是:SQL查詢(難道我使用COUNT?)

名單誰所有有興趣的任何客戶的名稱:

ARTIST(artistID,LastName,FirstName,Nationality,DOB) 

CUSTOMER(customerID,FirstName,LastName) 

CUSTOMER_ARTIST_INT(artistID,CustomerID) 

需要與進行SQL查詢了這個問題幫助來自美國的藝術家。

對SQL來說很新鮮的東西會讓有人把我推向正確的方向。

這是我到目前爲止,不知道如果我在正確的軌道上。

SELECT C.FirstName, C.LastName, A.NATIONALITY 
FROM dtoohey.CUSTOMER C, dtoohey.ARTIST A, dtoohey.CUSTOMER_ARTIST_INT I 
WHERE C.CUSTOMERID=I.CUSTOMERID AND A.ARTISTID=I.ARTISTID; 

編輯:使用的Oracle SQL Developer

+0

你也可以使用一個不同的,因爲這看起來像客戶會重複每一個藝術家。 –

+0

您使用的是Oracle還是MySQL?不要使用不適當的標籤。 – Barmar

回答

0

你想加入所有三個表在一起,然後指定'美國爲WHERE條款,我相信國籍......

SELECT C.* 
FROM Customer C 
INNER JOIN customer_artist_int ca ON c.customerID = ca.customerID 
INNER JOIN artist a ON a.artistID = ca.artistID 
WHERE a.Nationality = 'United States' 

編輯:我現在注意到,你說你想列出對全部感興趣的藝術家來自美國的客戶。你的意思是你只想要對感興趣的客戶,每個美國藝術家?如在約翰史密斯只對有一個美國藝術家感興趣,他的名字應該是而不是被包括在內?這個邏輯會更深入,但我會等待你的指示繼續下去。

+0

這是正確的,只有對美國所有藝術家感興趣的客戶應該包括在內。 – joel0z

-1

假設國籍是一個字符串和藝術家都是獨一無二的:

WITH us_artists_cnt AS (
    SELECT COUNT(*) AS us_artists_cnt 
    FROM Artists 
    WHERE Nationality = 'United States'), 
customers_artists AS (
    SELECT C.customerID, C.FirstName, C.LastName, A.NATIONALITY, count(*) cnt 
    FROM Customer C 
    INNER JOIN customer_artist_int CA on CA.customerID = C.customerID 
    INNER JOIN Artist A on A.artistID = CA.artistID 
    WHERE A.nationality = 'United States' 
    GROUP BY C.customerID) 
SELECT C.customerID, C.FirstName, C.LastName, A.NATIONALITY, cnt 
FROM customers_artists 
WHERE cnt = us_artists_cnt 

這接近。讓我知道這是怎麼回事。

+0

如果我錯了,請糾正我,但是你的第一個「WITH」是計算所有美國藝術家的數量。假設它返回5.您的第二個「WITH」將加入三個表並將記錄計數爲「cnt」。如果我是一個用戶,並且我喜歡5個歐洲樂隊,那麼第二個'WITH'不會將'cnt'返回爲5,從而使'cnt = us_artists_cnt'成爲true?我相信你也需要在第二個「WITH」中加入WHERE A.nationality ='United States'。 – Santi

+0

是的,先生,你是正確的。編輯調整 – JSF

+0

感謝您花時間幫忙!這正是我需要的!,我已經單獨運行了這個查詢的部分,並且它返回了我正在查找的值。然而,當我運行整個查詢時,我收到錯誤「缺少選擇關鍵字」行「5列:1.它是如此接近!只需要解決這個錯誤 – joel0z

0

如果您將客戶與來自美國的藝術家以及來自客戶的小組一起加入,您可以使用having條款將計數與美國藝術家總人數進行比較。如果算上匹配客戶返回行:

select c.FirstName, c.LastName 
    from customer c 
    join customer_artist_int cai 
    on cai.CustomerID = c.customerID 
    join artist a 
    on a.artistID = cai.artistID 
    and a.Nationality = 'United States' 
group by c.customerID, c.FirstName, c.LastName 
having count(*) = (select count(*) 
        from artist 
        where Nationality = 'United States')