【问题标题】:MySQL: Check count of columns in one table against value in column of second tableMySQL:根据第二个表的列中的值检查一个表中的列数
【发布时间】:2020-08-22 12:36:30
【问题描述】:

虽然这听起来与this post 相似,但它涉及的内容更多一些。我想要做的是检查表 1 中的列条目数是否等于第 2 列中存储的值。到 whit:

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

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

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

这是我开始的:

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

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

【问题讨论】:

  • @Strawberry:我提供了我正在使用完整 WITH 表的代码。这怎么不能算作一个最小的例子?
  • 提供的链接中接受的答案详细解释了所有这些

标签: mysql sql select comparison


【解决方案1】:

如果isComplete列的数据类型是BOOLEANINTEGER01)那么你需要检查列的总和:

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

请参阅demo
样本数据的结果:

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

【讨论】:

  • 这对我来说似乎是最简单且更具可读性的实现,没有冒犯@Mureinik。我会试一试并确认。谢谢。
  • isCompletetinyint。这将返回NULL isComplete 是否全部为真。 :(
  • @WhiteRau BOOLEAN 数据类型只是 TINYINT(1) 的别名。检查此演示以查看代码是否有效:db-fiddle.com/f/p1r9gptKTA67nNamtDaSMF/0
  • 是的。我在偷看。我正在查看我的东西,但我不知道为什么我得到NULL,因为它们是相同的(每个表中只有几列,但这无关紧要,因为我们不匹配这些)。跨度>
【解决方案2】:

truefalse 在数字上下文中充当 10。所以你可以总结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

【讨论】:

  • 但是我如何检查特定的 ID 号?这似乎检查了一切......
  • @WhiteRau 你可以添加 where 子句:where t2.id = 20
  • 哦,把它放在最后?行。我会试一试。谢谢。 :)
猜你喜欢
  • 2020-04-08
  • 2010-10-23
  • 2013-12-06
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 2015-06-03
相关资源
最近更新 更多