我有以下表格:
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
的总数返回的每笔贷款、交易和列表?为什么我的查询不起作用?
数据库小提琴:https://www.db-fiddle.com/f/g9CoA9CdDujqzG4ZpgmJXh/1
active_items
的输出预计为 5。
答案 0 :(得分:1)
不要为此使用 data class PokemonData(
val data: List<PokemonItem>
)
data class PokemonAbilities(
var ability: List<PokemonAbility>
)
data class PokemonAbility(
var name: String,
var text: String,
var type: String
): Serializable
data class PokemonImage(
@SerializedName("small") val smallImageUrl: String
)
,因为您没有将表相互关联。只需执行 3 个单独的查询并添加计数即可。
JOIN
答案 1 :(得分:0)
我不是 100% 清楚您要检查什么。 但是,如果我理解正确,我认为您遇到的问题是您只是在检查 user_id = 1,它可能在所有表中都没有状态 1(如果没有看到您的数据,我真的无法确定)。 我想你想做这样的事情:
SELECT COUNT(*) AS active_items
FROM loans
INNER JOIN deals ON deals.user_id = loans.user_id
INNER JOIN listings ON listings.user_id = loans.user_id
WHERE
loans.status = 1
AND deals.status = 1
AND listings.status = 1