簡體   English   中英

對於我編寫的以下查詢,我收到“標量子查詢包含多於一行”。有人可以糾正我嗎?

[英]I am getting "Scalar subquery contains more than one row" for following query I wrote.Can someone please correct me?

兩張桌子是

  1. 客戶(身份證、姓名、國家)

客戶表

  1. 購買(id,customer_id,年份)

采購表

我希望看到以下 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 ...)返回不止一行。 好吧……您不能對多行使用簡單的相等 ( = )。

您有兩個選擇:

  1. 您需要確保它返回單行,可能使用MAX()函數(或其他),如下所示:

     where purchase.id = (select MAX(id) from purchase p1 ...
  2. 使用聚合運算符(如ANY )。 例如:

     where purchase.id = ANY (select id from purchase p1 ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM