MySQL:根据第二个 table 列中的值检查一个 table 中的列数
MySQL: Check count of columns in one table against value in column of second table
虽然这听起来与 this post 相似,但涉及的内容更多一些。我想要做的是检查 table 1 中的列条目数是否等于第 2 列中的存储值。惠特:
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);
我只需要 true/false return,但我卡住了。有人能指出我正确的方向吗?
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
如果列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
。
参见demo。
您的示例数据的结果:
| result |
| ------ |
| 0 |
虽然这听起来与 this post 相似,但涉及的内容更多一些。我想要做的是检查 table 1 中的列条目数是否等于第 2 列中的存储值。惠特:
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);
我只需要 true/false return,但我卡住了。有人能指出我正确的方向吗?
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
如果列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
。
参见demo。
您的示例数据的结果:
| result |
| ------ |
| 0 |