首页 > 解决方案 > 如何比较 3 个或更多表的行数并返回布尔值?

问题描述

我可以得到一个 BOOLEAN 结果来说明两个表是否具有与此问题和答案相同的行数:Compare row count of two tables in a single query and return boolean

SELECT 
       CASE WHEN (select count(*) from table1)=(select count(*) from table2)
       THEN 1
       ELSE 0
END AS RowCountResult

我已经用 3 张桌子试过了:

SELECT 
    CASE WHEN (SELECT count(*) from personal)=(SELECT count(*) from exam)=(SELECT COUNT(*) from contact)    
THEN 1 
ELSE 0 
END AS RowCountResult 

但返回 0,而 3 个表实际上具有相同的行数,所以它应该返回 1。任何帮助表示赞赏!

标签: mysqlbooleanrowcount

解决方案


像这样的表达式:

a = b = c

被评估(从左到右)为:

(a = b) = c

并且因为(a = b)它是一个布尔表达式,它被评估为0or 1,所以你最终得到1 = cor的评估0 = c,在你的情况下是(很可能) always false

您应该分别比较atobbtoc并将运算符AND用于最终结果,例如:

a = b AND b = c

所以,你的代码应该是:

SELECT 
  (SELECT count(*) from personal) = (SELECT count(*) from exam)
  AND
  (SELECT count(*) from exam) = (SELECT COUNT(*) from contact) AS RowCountResult

或更好的子查询:

SELECT count1 = count2 AND count2 = count3 AS RowCountResult 
FROM (
  SELECT (SELECT count(*) from personal) count1,
         (SELECT count(*) from exam) count2,
         (SELECT COUNT(*) from contact) count3    
) t 

您实际上并不需要CASE表达式。


推荐阅读