繁体   English   中英

SELECT "NOT IN", INNER JOIN and COUNT in SQL Query

[英]SELECT "NOT IN", INNER JOIN and COUNT in SQL Query

我正在尝试 select,在客户地址表中找不到 OA 表中的坐标。

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

返回客户表中的坐标。 我如何返回不在客户表中的那些?

我还可以计算每个坐标中有多少客户吗(坐标不具体也不准确,这纯粹是为了查询测试)

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

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

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;

此类详细信息取决于您的确切表结构,您应该尝试一下或提供更多详细信息。

你也可以这样做:

SELECT co_ords
FROM   oa
MINUS
SELECT address
FROM   customers;

这有时比反加入更快。 请注意, MINUS对结果集进行了区分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM