繁体   English   中英

如何比较 3 个或更多表的行数并返回 BOOLEAN 值?

[英]How to compare row counts of 3 OR MORE tables and return a BOOLEAN Value?

我可以得到一个 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。任何帮助表示赞赏!

像这样的表达式:

a = b = c

被评估(从左到右)为:

(a = b) = c

并且由于(a = b)是一个 boolean 表达式,它被评估为01 ,所以你最终得到1 = c0 = c的评估(在你的情况下最可能是)8 总是false的。

您应该分别比较abbc并使用运算符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表达式。

那是因为您将比较结果与第三行数进行比较,即 A=B(将给出真或假)与 C(在这种情况下是一个数字)。您应该得到您所期望的,例如( A=B)=(B=C),或者,在你的情况下

SELECT 
    CASE WHEN 
    ((SELECT COUNT(*) FROM Personal) = (SELECT COUNT(*) FROM Exam))
    = ((SELECT COUNT(*) FROM Contact) = (SELECT COUNT(*) FROM Exam))    
    THEN 1 
    ELSE 0 
    END 
AS RowCountResult 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM