Sql 如何修复ORA-01427:单行子查询返回多行?

Sql 如何修复ORA-01427:单行子查询返回多行?,sql,Sql,在“客户”表中有5个客户,在“客户”表中有48个职位。“客户”表中的每个客户在“客户”表中都有8个相关职位。我想知道有多少客户在“客户服务”中拥有8个或8个以上的相关职位。如何使用select执行此操作 提前谢谢。您可以使用MAX例如: CREATE TABLE customer ( id_customer NUMBER PRIMARY KEY, name VARCHAR2(10), surname VARCHAR2(20)); CREATE TABLE customer_w

在“客户”表中有5个客户,在“客户”表中有48个职位。“客户”表中的每个客户在“客户”表中都有8个相关职位。我想知道有多少客户在“客户服务”中拥有8个或8个以上的相关职位。如何使用select执行此操作


提前谢谢。

您可以使用
MAX
例如:

CREATE TABLE customer ( id_customer NUMBER PRIMARY KEY, name VARCHAR2(10), surname VARCHAR2(20));

CREATE TABLE customer_wer ( id_customer NUMBER, name VARCHAR2(10), surname VARCHAR2(20), data_from DATE, data_to DATE NOT NULL, CONSTRAINT customer_wer_pk PRIMARY KEY (id_customer, data_from), CONSTRAINT customer_wer_fk FOREIGN KEY (id_customer) REFERENCES customer (id_customer));

 SELECT COUNT(customer.id_customer) 
   FROM customer JOIN customer_wer
     ON customer.id_customer = customer_wer.id_customer
  WHERE (SELECT customer_wer.id_customer 
           FROM customer_wer JOIN customer
             ON customer_wer.id_customer = customer.id_customer
          GROUP BY customer.id_customer) >= 8;
或者——如果可能的话更好——向子选择添加一些条件,以便它返回唯一的结果

如果要检查子查询返回的行之一是否为8,另一个选项是使用
IN
运算符:

SELECT COUNT(customer.id_customer) 
  FROM customer JOIN customer_wer
    ON customer.id_customer = customer_wer.id_customer
 WHERE (SELECT MAX (customer_wer.id_customer) 
          FROM customer_wer JOIN customer
            ON customer_wer.id_customer = customer.id_customer
         GROUP BY customer.id_customer) >= 8;
或者使用
EXISTS
将条件
>=8
移动到子查询中:

SELECT COUNT(customer.id_customer) 
  FROM customer JOIN customer_wer
    ON customer.id_customer = customer_wer.id_customer
 WHERE 8 IN (SELECT customer_wer.id_customer
               FROM customer_wer JOIN customer
                 ON customer_wer.id_customer = customer.id_customer
              GROUP BY customer.id_customer);
p.s.:(根据最新评论添加)

选择计数(c1.id\U客户)
来自客户c1

WHERE 2您希望查询做什么?我有两个表。一个只包含客户,第二个包含客户订单。我想知道有多少客户下了超过8个订单。添加“MAX”不起作用“独特”也不起作用。子查询必须返回几个位置。问题是我如何将几个职位与数字“8”进行比较?例如,客户有一些订单,每个客户可以有很少的订单,我如何才能只选择有8个订单的客户?操作员在
中的
是否正常工作?听起来可能。。。。如果没有:为什么?如果您需要
=8
存在
应该是精细的两种解决方案的结果都是0,结果应该是6。您的意思是整个
选择
?您可以先检查子查询(使用最后一条语句)。如果它不返回任何结果,则可能没有
customer\u-wer.id\u-customer>=8的行。
customer\u-wer.id\u-customer>=8的子查询不返回任何行。我的子查询“从klient\u wer中选择计数(klient\u wer.id\u klienta)在klient\u wer.id\u klienta上加入klient=klient.id\u klienta组,按klient.id\u klienta”生成6行,值为8。我需要将这6行与主查询中的数字“8”进行比较,结果应该是“6”。
SELECT COUNT(customer.id_customer) 
  FROM customer JOIN customer_wer
    ON customer.id_customer = customer_wer.id_customer
 WHERE EXISTS (SELECT customer_wer.id_customer
                 FROM customer_wer JOIN customer
                   ON customer_wer.id_customer = customer.id_customer
                WHERE customer_wer.id_customer >= 8
                GROUP BY customer.id_customer);
SELECT COUNT(c1.id_customer) 
  FROM customer c1
 WHERE 2 <= (SELECT COUNT (cw1.id_customer)
               FROM customer_wer cw1
              WHERE c1.id_customer = cw1.id_customer);