提问人:WhiteRau 提问时间:8/22/2020 最后编辑:MureinikWhiteRau 更新时间:8/22/2020 访问量:63
MySQL:将一个表中的列数与第二个表的列中的值进行检查
MySQL: Check count of columns in one table against value in column of second table
问:
虽然这听起来与这篇文章相似,但它涉及更多。我想做的是检查表 1 中的列条目数是否等于第 2 列中的存储值。到白:
table1:
+------+--------------+
| id | isComplete | VARCHAR, TINYINT
+------+--------------+
| 20 | true |
| 20 | false |
| 20 | true |
+------+--------------+
table2:
+------+--------------+
| id | numJobs | VARCHAR, TINYINT
+------+--------------+
| 20 | 3 |
+------+--------------+
所以这个想法基本上是检查(2)的数量是否等于(3)值。isComplete === true
numJobs
这是我开始的:
SELECT COUNT(*) FROM table1 WHERE id = 20
AND isComplete = true
AND LIKE (SELECT numJobs FROM table2 WHERE id = 20);
我需要的只是一个真/假的回报,但我被困住了。有人能给我指出正确的方向吗?
答:
1赞
Mureinik
8/22/2020
#1
true
并在数字上下文中起作用。因此,您可以对列求和并将其连接到:false
1
0
isComplete
table2
SELECT table2.*
FROM table2 t2
JOIN (SELECT id, SUM(iscomplete) AS sic
FROM table1
GROUP BY id) t1 ON t2.id = t1.id AND t2.numjobs = t1.sic
评论
0赞
WhiteRau
8/22/2020
但是我如何检查特定的身份证号码呢?这似乎检查了一切......
0赞
Mureinik
8/22/2020
@WhiteRau可以添加 where 子句:where t2.id = 20
0赞
WhiteRau
8/22/2020
哦,最后就把它钉住?还行。我会试一试。谢谢。:)
1赞
forpas
8/22/2020
#2
如果列的数据类型是 or ( 或 ),则需要检查列的总和:isComplete
BOOLEAN
INTEGER
0
1
SELECT SUM(t1.isComplete) = (SELECT t2.numJobs FROM table2 t2 WHERE t2.id = t1.id) result
FROM table1 t1
WHERE t1.id = 20
表达式:
SUM(t1.isComplete) = (SELECT t2.numJobs FROM table2 t2 WHERE t2.id = t1.id)
将计算结果为 或 。0
1
观看演示。
示例数据的结果:
| result |
| ------ |
| 0 |
评论
0赞
WhiteRau
8/22/2020
对我来说,这看起来是最简单、更易读的实现,没有冒犯@Mureinik。我会试一试并确认。谢谢。
0赞
WhiteRau
8/22/2020
isComplete
是一个 .这将返回是否全部为真。 :(tinyint
NULL
isComplete
0赞
forpas
8/22/2020
@WhiteRau BOOLEAN 数据类型只是 TINYINT(1) 的别名。查看此演示以查看代码是否有效:db-fiddle.com/f/p1r9gptKTA67nNamtDaSMF/0
0赞
WhiteRau
8/22/2020
是的。我偷看。我正在查看我的东西,我无法弄清楚为什么我得到它们相同(每个表中只有几列,但这无关紧要,因为我们与这些不匹配)。NULL
0赞
forpas
8/22/2020
检查一下: db-fiddle.com/f/p1r9gptKTA67nNamtDaSMF/2
上一个:比较两个没有主键的表
评论