![](/img/trans.png)
[英]How to compare fields in a row in two tables and return values that are not the same
[英]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 表达式,它被评估为0
或1
,所以你最终得到1 = c
或0 = c
的评估(在你的情况下最可能是)8 总是false
的。
您应该分别比较a
到b
和b
到c
并使用运算符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.