mysql - 如何比较 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。任何帮助表示赞赏!
解决方案
像这样的表达式:
a = b = c
被评估(从左到右)为:
(a = b) = c
并且因为(a = b)
它是一个布尔表达式,它被评估为0
or 1
,所以你最终得到1 = c
or的评估0 = c
,在你的情况下是(很可能) always false
。
您应该分别比较a
tob
和b
toc
并将运算符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
表达式。
推荐阅读
- react-native - 是否有任何实现这种栏的反应本机库?
- python - 在 win32 上安装 GDAL Python [MSC v.1916 32 位 (Intel)]
- entity-framework - 无法将联结表(由于多对多关系)添加到实体数据模型设计器 (edmx)
- javascript - 在创建新的 reactjs 应用程序期间,在 1620 个扫描包中发现 1 个低严重性漏洞
- python - 懒人班工厂?
- network-programming - 有没有办法通过networkx找到network_simplex中哪些容量没有足够的容量?
- regex - 正则表达式检测具有 .png 且介于 [ 和 ] 之间的字符串
- python - 我如何在没有第二个日期的模型中使用 DateTime 字段
- jasper-reports - 如何做两个细节带之间的差距?
- javascript - 从 ng-option、angularJS 更改选定的选项标签