![](/img/trans.png)
[英]I am trying to execute the following query but got (Error Code: 1242. Subquery returns more than 1 row)
[英]I am getting "Scalar subquery contains more than one row" for following query I wrote.Can someone please correct me?
兩張桌子是
我希望看到以下 3 件事
每個客戶的 ID(重命名列 cus_id),
每個客戶的姓名(重命名列 cus_name)
他們最近購買的購買 ID(重命名列 latest_purchase_id)
請注意,購買 id 是整數和字符的混合,所以要找到最新的 id,我需要找到最近的年份。一年內可以多次購買
我的代碼:
select customer.id as cus_id,customer.name as cus_name,purchase.id as latest_purchase_id
from customer
join purchase
on customer.id=purchase.customer_id
where purchase.id=(select id
from purchase p1
where year = ( select max(year)
from purchase p2
where p1.customer_id=p2.customer_id))
;
樣本輸出
cus_id cus_name latest_purchase_id
1 John 786F
我收到標量子查詢收到多個行錯誤。
這是你的問題:
select c.id as cus_id, c.name as cus_name, p.id as latest_purchase_id
from customer c join
purchase p
on c.id = p.customer_id
where p.id = (select p2.id
-----------^
from purchase p2
where p2.year = (select max(p3.year)
from purchase p3
where p2.customer_id = p3.customer_id
)
);
要解決此問題,請將=
更改為in
。 但是,如果沒有對您在做什么的描述,我無法判斷這是否有任何用處。
如果您想為每個客戶購買最新的產品,我正在考慮這樣的事情:
select c.id as cus_id, c.name as cus_name, p.id as latest_purchase_id
from customer c join
purchase p
on c.id = p.customer_id join
(select p2.customer_id, max(p2.year) as max_year
from purchase p2
group by p2.customer_id
) p2
on p2.customer_id = p.customer_id and
p2.max_year = p.year;
你可以試試下面——
select customer.id as cus_id,customer.name as cus_name,purchase.id as
latest_purchase_id
from customer join purchase p1 on customer.id=p1.customer_id
where year =
( select max(year) from purchase p2
where p1.customer_id=p2.customer_id)
標量子查詢接收多於一行
這意味着(select id from purchase p1 ...)
返回不止一行。 好吧……您不能對多行使用簡單的相等 ( =
)。
您有兩個選擇:
您需要確保它返回單行,可能使用MAX()
函數(或其他),如下所示:
where purchase.id = (select MAX(id) from purchase p1 ...
使用聚合運算符(如ANY
)。 例如:
where purchase.id = ANY (select id from purchase p1 ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.