[oracle]同组的子查询中使用 IN 运算符

标签: ora-00913 sql Oracle
发布时间: 2014/3/9 13:23:05
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

时遇到一些麻烦与查询。我要把所有的客户端信息,客户端已只有采取 1 测试并通过。我被告知要使用 IN 运算符。这有什么:

SELECT *
  FROM Client
 WHERE ClientName IN (SELECT ClientName, COUNT(TestNbr)
                        FROM Test
                    GROUP BY ClientName, TestResult
                      HAVING COUNT(TestNbr)=1
                         AND TestResult='Pass');

出现此错误:

(SELECT ClientName, COUNT(TestNbr)
 *
ERROR at line 4: 
ORA-00913: too many values

我明白这是因为我不应该有其他条目中那条线除了应答信息。我该如何解决这个问题?

解决方法 1:

删除 COUNT(*) 上作为它的子查询的列不是结果,原文

SELECT  *
FROM    Client
WHERE   ClientName IN
        (
            SELECT  ClientName
            FROM    Test
            GROUP   BY ClientName, TestResult
            HAVING  COUNT(TestNbr) = 1 AND TestResult='Pass'
        );

但我宁可使用 JOIN 而不是使用IN

SELECT  DISTINCT a.*
FROM    Client a
        INNER JOIN
        (
            SELECT  ClientName
            FROM    Test
            GROUP   BY ClientName, TestResult
            HAVING  COUNT(TestNbr) = 1 AND TestResult='Pass'
        ) b ON a.ClientName = b.ClientName

为了更快的性能,添加索引列上 ClientName 上这两个表。

赞助商