【发布时间】:2021-07-21 23:28:05
【问题描述】:
我有以下表格:
create table loans
(
id int null,
status int null,
user_id int null
);
INSERT INTO loans VALUES (1, 1, 1);
INSERT INTO loans VALUES (2, 0, 1);
INSERT INTO loans VALUES (3, 1, 1);
create table deals
(
id int null,
status int null,
user_id int null
);
INSERT INTO deals VALUES (2, 0, 1);
INSERT INTO deals VALUES (3, 0, 1);
create table listings
(
id int null,
status int null,
user_id int null
);
INSERT INTO listings VALUES (1, 1, 1);
INSERT INTO listings VALUES (2, 1, 1);
INSERT INTO listings VALUES (3, 1, 1);
并有以下SQL:
SELECT COUNT(*) AS active_items
FROM loans
LEFT JOIN deals ON deals.user_id = 1
LEFT JOIN listings ON listings.user_id = 1
WHERE
loans.status = 1
AND deals.status = 1
AND listings.status = 1
AND loans.user_id = 1
目标是计算每个表项的状态为 1 的所有行,而忽略任何状态为 0 的行。我所做的查询似乎一直只返回 0,我不明白为什么?如何查询数据库,以便找到状态为 1 并返回一个名为 active_items 的每个贷款、交易和列表?为什么我的查询不起作用?
DB 小提琴:https://www.db-fiddle.com/f/g9CoA9CdDujqzG4ZpgmJXh/1
active_items 的输出预计为 5。
【问题讨论】:
-
ON deals.user_id = loans.user_id并为下一次加入做同样的事情 -
另请参阅stackoverflow.com/questions/37199736/…,了解当您有多个联接时的聚合。
-
@isaace 由于所有表都被过滤到
user_id = 1,它实际上与加入user_id列相同。 -
能否提供样本数据和预期结果?
-
@Barmar db-fiddle.com/f/g9CoA9CdDujqzG4ZpgmJXh/0 输出应该是
active_items= 6