从 SQL 中的左联接和内联接中减去计数
Subtract count from left join and inner join in SQL
我想合并两个 table,并从内部联接中得到的 table 中减去左联接中得到的 table 中的订单数。
这是我所做的,但我不知道这是否正确或如何进行?
WITH t1 AS (
SELECT *
FROM orders
LEFT JOIN food ON orders.id = food.id
),
t2 AS (
SELECT *
FROM orders
INNER JOIN food ON orders.id = food.id
)
SELECT
/* now what? */
现在我想在两个 table 中减去行数。
不知道怎么办,要不要再加入table做减法,有没有更简单的方法?
您甚至不需要两个单独的查询来回答您的问题。左连接和内连接在结果集上的唯一区别是前者将保留不映射的订单记录。所以,你可以简单地写:
-- query #3
SELECT *
FROM orders o
LEFT JOIN food f
ON f.id = o.id
WHERE f.id IS NULL;
如果将上面的结果集与内连接查询 #2 组合,您将得到总的左连接查询 #1 结果集 没有 WHERE
条款。
所以计数(查询#1)=计数(查询#2)+计数(查询#3)
我想合并两个 table,并从内部联接中得到的 table 中减去左联接中得到的 table 中的订单数。 这是我所做的,但我不知道这是否正确或如何进行?
WITH t1 AS (
SELECT *
FROM orders
LEFT JOIN food ON orders.id = food.id
),
t2 AS (
SELECT *
FROM orders
INNER JOIN food ON orders.id = food.id
)
SELECT
/* now what? */
现在我想在两个 table 中减去行数。
不知道怎么办,要不要再加入table做减法,有没有更简单的方法?
您甚至不需要两个单独的查询来回答您的问题。左连接和内连接在结果集上的唯一区别是前者将保留不映射的订单记录。所以,你可以简单地写:
-- query #3
SELECT *
FROM orders o
LEFT JOIN food f
ON f.id = o.id
WHERE f.id IS NULL;
如果将上面的结果集与内连接查询 #2 组合,您将得到总的左连接查询 #1 结果集 没有 WHERE
条款。
所以计数(查询#1)=计数(查询#2)+计数(查询#3)