[英]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;
为了计算有多少客户属于某个坐标,我们可以将COUNT
与GROUP 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.