MySQL:对照第二个表的列中的值检查一个表中的列数

MySQL:对照第二个表的列中的值检查一个表中的列数,mysql,sql,select,comparison,Mysql,Sql,Select,Comparison,虽然这听起来很像,但它有一点更复杂。我要做的是检查表1中的列条目数是否等于第2列中存储的值。致: 表1: +---+-------+ |id | isComplete | VARCHAR,TINYINT +---+-------+ |20 |正确| |20 |假| |20 |正确| +---+-------+ 表2: +---+-------+ |id | numJobs | VARCHAR,TINYINT +---+-------+ | 20 | 3 | +---+-

虽然这听起来很像,但它有一点更复杂。我要做的是检查表1中的列条目数是否等于第2列中存储的值。致:

表1: +---+-------+ |id | isComplete | VARCHAR,TINYINT +---+-------+ |20 |正确| |20 |假| |20 |正确| +---+-------+ 表2: +---+-------+ |id | numJobs | VARCHAR,TINYINT +---+-------+ | 20 | 3 | +---+-------+ 因此,基本上是检查isComplete==true 2的数量是否等于numJobs 3的值

我从这里开始:

从id=20的表1中选择COUNT* 并且isComplete=true 并从表2中选择numJobs,其中id=20; 我所需要的只是一份真/假报税表,但我被卡住了。有人能给我指出正确的方向吗?

在数字上下文中,true和false充当1和0。因此,您可以对isComplete列求和,并将其连接到表2中:

选择表2* 来自表2 t2 加入SELECT id,将SUMiscomplete作为sic 来自表1 根据t2.id=t1.id和t2.numjobs=t1.sic上的id t1分组 true和false在数字上下文中充当1和0。因此,您可以对isComplete列求和,并将其连接到表2中:

选择表2* 来自表2 t2 加入SELECT id,将SUMiscomplete作为sic 来自表1 根据t2.id=t1.id和t2.numjobs=t1.sic上的id t1分组
如果列isComplete的数据类型为布尔值或整数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      |

如果列isComplete的数据类型为布尔值或整数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      |

请参阅@草莓:我提供了与我正在使用的代码完全相同的表。这怎么不算是一个简单的例子呢?在提供的链接中,被接受的答案详细地解释了所有这些请参见@草莓:我提供了我正在使用的代码以及完整的表格。这怎么不算是一个最简单的例子呢?提供的链接上的公认答案在某种程度上详细地解释了这看起来是最简单、更可读的实现,无意冒犯@Mureinik。我要试一试并确认一下。谢谢。我完成了一小段时间。无论isComplete是否都为真,它都返回NULL:@WhiteRau布尔数据类型只是TINYINT1的别名。检查这个演示,看看代码是否有效:是的。我在偷看。我在看我的东西,我不明白为什么我会得到NULL,因为它们在每个表中都是相同的,只是多了几列,但这与我们没有匹配这些列无关。检查一下:这看起来是我最简单、可读性更高的实现,无意冒犯@Mureinik。我要试一试并确认一下。谢谢。我完成了一小段时间。无论isComplete是否都为真,它都返回NULL:@WhiteRau布尔数据类型只是TINYINT1的别名。检查这个演示,看看代码是否有效:是的。我在偷看。我在看我的资料,我不明白为什么我会得到NULL,因为它们在每个表中都是相同的,只是多了几列,但这与我们没有匹配无关。检查一下:但是我如何检查特定的ID号?这似乎检查了一切…@WhiteRau您可以添加一个where子句:where t2.id=20oh,只需将其固定在末尾?好啊我要试一试。谢谢但我如何检查特定的身份证号码?这似乎检查了一切…@WhiteRau您可以添加一个where子句:where t2.id=20oh,只需将其固定在末尾?好啊我要试一试。谢谢