[英]SQL(inner join with select statement)
我有2張桌子拍賣和客戶
拍賣
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
您必須在內部查詢中添加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
這樣嘗試
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;
內部select
缺少cust_id
。 為什么要使用內部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
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.