[英]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.