2014-02-14 142 views
0

我有2個表拍賣和客戶SQL(內聯同select語句)

拍賣

custId|itemName|yearsUsed|bidPrice 
    1 | MacBook| 2 | 1500 
    3 | Dell | 1 | 1000 
    2 | MacBook| 2 | 1500 

客戶

custId|custName 
    1 | tom 
    2 | jerry 
    3 | susan 

我要查詢這些客戶的名稱,項目名稱以及誰擁有一個項目的同樣價格和業主使用的年份的競標價格

下面的查詢返回其具有由客戶

SELECT ac.itemName, 
     ac.yearsUsed, 
     ac.bidPrice 
    FROM auction ac 
GROUP BY ac.itemName, 
     ac.yearsUsed, 
     ac.bidPrice 
    HAVING COUNT(*) > 1; 

輸出

itemName yearsUsed bidPrice 
---------------------------- 
MacBook  2  1500 

現在我想查詢誰曾出價相同的價格該項目的客戶名稱相同的投標價格項目名稱

SELECT ac.itemName, 
     ac.yearsUsed, 
     ac.bidPrice 
    FROM auction ac 
     INNER JOIN (
        SELECT custName 
         FROM customer 
        ) c 
       ON c.custId = ac.custId 
GROUP BY ac.itemName, 
     ac.yearsUsed, 
     ac.bidPrice 
    HAVING COUNT(*) > 1; 

我得到一個錯誤

ERROR at line 1: 
ORA_00904:"C"."CUSTID": invalid identifier 

我正在使用sqlplus

回答

4

您必須在內部查詢中添加custid

SELECT 
    ac.itemName, 
    ac.yearsUsed, 
    ac.bidPrice 
FROM 
auction ac INNER JOIN 
    (SELECT custName, 
     -- The following CUSTID was missing: 
    CUSTID 
    FROM customer) c ON c.custId = ac.custId 
GROUP BY ac.itemName,ac.yearsUsed,ac.bidPrice 
HAVING COUNT(*) > 1; 

然而,在你的情況下,子查詢是沒有必要的。

SELECT 
    ac.itemName, 
    ac.yearsUsed, 
    ac.bidPrice 
FROM 
auction ac INNER JOIN 
customer c ON c.custId = ac.custId 
GROUP BY 
    ac.itemName, 
    ac.yearsUsed, 
    ac.bidPrice 
HAVING COUNT(*) > 1; 

如果你還需要,按你的意見,客戶的名字,那麼你需要去的解析表達式count(*) over(...)

select 
    custName, 
    itemName, 
    yearsUsed, 
    bidPrice 
from (
    SELECT 
    c.custName, 
    ac.itemName, 
    ac.yearsUsed, 
    ac.bidPrice, 
    count(*) over (partition by 
        ac.itemName, 
        ac.yearsUsed, 
        ac.bidPrice) cnt 
    FROM 
    auction ac INNER JOIN 
    customer c ON c.custId = ac.custId 
) 
where 
    cnt > 1 

see also this SQL fiddle

+0

第一個SQL查詢不返回客戶名稱,這就是我與,因爲我需要輸出誰出價相同價格的項目以及 – user3213758

+0

客戶名稱掙扎哪些客戶的名字你想,*湯姆*或*傑裏*,爲什麼? –

+0

我需要輸出他們的名字,因爲他們對「Macbook」項目以及項目「Macbook」 – user3213758

0

嘗試這樣

 SELECT 
ac.itemName, 
ac.yearsUsed, 
ac.bidPrice, 
c.custName 
FROM auction ac 
LEFT JOIN customer c ON c.custId = ac.custId 
GROUP BY ac.itemName,ac.yearsUsed,ac.bidPrice 
HAVING COUNT(*) > 1; 
+0

錯誤的itemName,yearUsed和bidPrice的出價相同。不是GROUP BY表達式 – user3213758

0

cust_id從內部丟失select。爲什麼使用內部select

select ac.itemname 
,  ac.yearsused 
,  ac.bidprice 
from auction ac 
inner 
join customer c 
on  c.custid = ac.custid 
group 
by  ac.itemname 
,  ac.yearsused 
,  ac.bidprice 
having count(*) > 1 
; 
+0

我在sql中不是很好。所以我嘗試了一些可以實現我的輸出的選項 – user3213758

+0

@ user3213758:然後使用'join'。內部的'select'不添加任何內容。 –

+0

好的,謝謝您的建議 – user3213758