MySQL:将一个表中的列数与第二个表的列中的值进行检查

MySQL: Check count of columns in one table against value in column of second table

提问人:WhiteRau 提问时间:8/22/2020 最后编辑:MureinikWhiteRau 更新时间:8/22/2020 访问量:63

问:

虽然这听起来与这篇文章相似,但它涉及更多。我想做的是检查表 1 中的列条目数是否等于第 2 列中的存储值。到白:

table1:
+------+--------------+
|  id  |  isComplete  |  VARCHAR, TINYINT
+------+--------------+
|  20  |  true        |
|  20  |  false       |
|  20  |  true        |
+------+--------------+

table2:
+------+--------------+
|  id  |  numJobs     |  VARCHAR, TINYINT
+------+--------------+
|  20  |  3           |
+------+--------------+

所以这个想法基本上是检查(2)的数量是否等于(3)值。isComplete === truenumJobs

这是我开始的:

SELECT COUNT(*) FROM table1 WHERE id = 20
AND isComplete = true
AND LIKE (SELECT numJobs FROM table2 WHERE id = 20);

我需要的只是一个真/假的回报,但我被困住了。有人能给我指出正确的方向吗?

MySQL SQL 选择 比较

评论

1赞 Strawberry 8/22/2020
查看 meta.stackoverflow.com/questions/333952/...
0赞 WhiteRau 8/22/2020
@Strawberry:我提供了我正在使用的代码,完整的WITH表。这怎么不是一个最小的例子?
1赞 Strawberry 8/22/2020
提供的链接中接受的答案详细解释了所有这些

答:

1赞 Mureinik 8/22/2020 #1

true并在数字上下文中起作用。因此,您可以对列求和并将其连接到:false10isCompletetable2

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 ( 或 ),则需要检查列的总和:isCompleteBOOLEANINTEGER01

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)

将计算结果为 或 。01

观看演示
示例数据的结果:

| result |
| ------ |
| 0      |

评论

0赞 WhiteRau 8/22/2020
对我来说,这看起来是最简单、更易读的实现,没有冒犯@Mureinik。我会试一试并确认。谢谢。
0赞 WhiteRau 8/22/2020
isComplete是一个 .这将返回是否全部为真。 :(tinyintNULLisComplete
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