如何计算具有多个表连接和条件的所有行?

时间:2021-04-28 15:20:42

标签: mysql join count

我有以下表格:

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。

2 个答案:

答案 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

DEMO

答案 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