oracle SQL查询中的SELECT“NOT IN”、内部连接和计数

7lrncoxx  于 2022-12-18  发布在  Oracle
关注(0)|答案(2)|浏览(167)

我正在尝试从OA表中选择哪些坐标在客户地址表中找不到。

SELECT DISTINCT
       OA.CO_ORDS
FROM    
        CUSTOMER
INNER JOIN  
        OA ON customer.address=oa.co_ords
ORDER BY ID ASC;

返回在customer表中的坐标。如何返回那些不在customer表中的坐标?
我是否还能计算出每个坐标中有多少客户(坐标不具体,也不准确,这纯粹是为了查询测试)

SELECT DISTINCT
           OA.CO_ORDS
    FROM    
            CUSTOMER
    INNER JOIN  
            OA ON customer.address=oa.co_ords
    ORDER BY ID ASC;
pbossiut

pbossiut1#

我们可以使用NOT EXISTS来查找那些没有出现在customer表中的坐标:

SELECT co_ords
FROM oa
WHERE 
  NOT EXISTS 
    (SELECT 1 FROM customers 
      WHERE address = oa.co_ords)
ORDER BY id;

为了计算有多少客户属于某个坐标,我们可以将COUNTGROUP BY结合使用,如下所示:

SELECT c.address, COUNT(*)
FROM customers c
JOIN oa 
  ON c.address = oa.co_ords
GROUP BY c.address;

最好是计算特定的列而不是 *。
使用IN子句代替JOIN表也可能更好:

SELECT c.address, COUNT(*)
FROM customers c
WHERE address IN 
  (SELECT co_ords FROM oa)
GROUP BY c.address;


这些细节取决于您的确切表格结构,请尝试一下或提供更多细节。

kgqe7b3p

kgqe7b3p2#

您还可以执行以下操作:

SELECT co_ords
FROM   oa
MINUS
SELECT address
FROM   customers;

这有时候比反连接要快。注意MINUS在结果集上做了一个不同的操作。

相关问题