【问题标题】:Select count(id) from one table where that id is present in another table MYSQL从一个表中选择count(id),其中该id存在于另一表MYSQL中
【发布时间】:2012-04-20 02:20:03
【问题描述】:

编辑:详细说明

详细说明:

*在 table_a 中有 100 个成员,但其中只有 50 个成员在 table_b 中有记录,只有 25 个在 table_b 中有记录,其中批准 = 1 因此我需要查询返回的值是 25*

大家好,这里是我要解决的查询,它需要返回一个结果计数,以便我可以使用 mysql_result($query, 0) 访问。

SELECT COUNT(id) FROM table_a WHERE (THIS IS WHERE I AM STUCK)

我需要检查(table_b 中的 memberID 计数,其中 memberID 与 table_a 中的每个 id 匹配并在 table_b = 1 中批准) - 是否大于 1

最终结果需要统计table_b中有条目的成员数。

需要访问的表列示例

table_a
-----------------
id

table_b
------------------
id
memberID
approved

如果您需要更多详细信息,请告诉我。

【问题讨论】:

  • 好的,您是在大于 1 的表中查找 ID,还是在大于 1 的两个表中查找 ID?
  • 正确地说结果应该是 a 中在 b 中具有相应条目的行数,其中(a.id = b.memberId 和 b.approved = 1)?
  • @ukritic - 您最终是否需要返回“count(table_a.id = table_b.MemberID AND table_b.approved = 1)”值,并且仅当该计数为“>1”时?
  • 这是对语句“我需要 SELECT COUNT(id) FROM table_a 进行 SELECT COUNT(id) FROM table_a 的最佳方式”最终结果应该是 COUNT(id) = ## 的单行

标签: mysql


【解决方案1】:

问题已解决

不得不倒过来考虑

    SELECT COUNT( DISTINCT memberID )
    FROM table_b
    WHERE approved =1

我什至不需要查看 table_a,因为我正在根据 table_b 计算 memberID

有时解决方案非常简单,就在您面前。

感谢大家的帮助!我希望这对将来的其他人有所帮助。

【讨论】:

  • 这与您的问题规范相同,但有一个微小但至关重要的细节:table_b.memberid 的任何值也出现在table_a.id 中。如果你不告诉他们,那当然没人知道。
  • 此查询返回我正在寻找的结果。基本上我不需要查询table_a,因为我只需要计算table_b 中的DISTINCT memberID。在我重新考虑了我真正需要的信息之后,我清楚地知道查询中不需要 table_a。
  • 是的,我的意思是它是正确的。还删除了DISTINCT 之后不需要的括号。
【解决方案2】:

我假设您想要获取 table_a 中与 table_b 匹配的记录数,只要 table_b 中的值被批准。因此,我将加入 2 张桌子。内连接确保您只考虑两个表中的行,而 where 语句处理批准的要求。

select count(a.id) 
from table_a a
join table_b b
on a.id = b.memberID
where b.approved=1

【讨论】:

  • 这返回了错误的数字,看起来它返回的是 table_b 中找到的项目总数,而不是 table_a 中满足要求的总数。
  • 我认为如果您将COUNT(a.id) 更改为COUNT(DISTINCT a.id),这将是正确的
【解决方案3】:
 SELECT b.ID, a.ID 

 FROM table_a a, table_b b 

 WHERE a.ID = b.ID AND b.ID = 1

【讨论】:

  • 根据 OP,他需要“...在 table_b = 1 中批准”的条目。即,b.APPROVED = 1,而您的 b.ID = 1。
  • 同意@sharakan - 测试是针对“table_b.approved”=1,而不是“b.ID”。
【解决方案4】:
SELECT COUNT(*) AS cnt
FROM table_a AS a
WHERE EXISTS
      ( SELECT *
        FROM table_b AS b
        WHERE b.memberID = a.id
          AND b.approved = 1
      )

【讨论】:

    【解决方案5】:

    我对 SQL 有点生疏,但是可以通过在查询中指定两个表来实现,如下所示:

    SELECT COUNT(DISTINCT table_a.id) 
      FROM table_a, table_b 
      WHERE table_a.id = table_b.MemberID 
        AND table_b.approved = 1;
    

    我认为符合您的选择标准。

    【讨论】:

    • 这会从上面返回相同的数字,看起来像是 table_b 记录的总数,而不是符合条件的 table_a 记录的计数
    猜你喜欢
    • 2018-03-20
    • 2012-03-23
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2016-09-23
    • 2016-01-27
    相关资源
    最近更新 更多