Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何比较3个或更多表的行计数并返回布尔值?_Mysql_Boolean_Rowcount - Fatal编程技术网

Mysql 如何比较3个或更多表的行计数并返回布尔值?

Mysql 如何比较3个或更多表的行计数并返回布尔值?,mysql,boolean,rowcount,Mysql,Boolean,Rowcount,我可以得到一个布尔结果,根据这个问题和答案,如果两个表的行数相同: 我在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

我可以得到一个布尔结果,根据这个问题和答案,如果两个表的行数相同:

我在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)
是一个布尔表达式,它的计算结果为
0
1
,因此最终的计算结果为
1=c
0=c
,在您的情况下,(很可能)总是
false

您应该分别将
a
b
b
c
进行比较,并使用操作符
获得最终结果,如:

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)
是一个布尔表达式,它的计算结果为
0
1
,因此最终的计算结果为
1=c
0=c
,在您的情况下,(很可能)总是
false

您应该分别将
a
b
b
c
进行比较,并使用操作符
获得最终结果,如:

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(在本例中是一个数字)进行比较。在本例中,您应该使用eg(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 

这是因为您正在将比较结果与第三行计数进行比较,即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 

谢谢我现在正在工作,谢谢!我现在正在工作。谢谢你的详细解释。谢谢你的详细解释。