我是MySQL的新手,我在试图弄清楚如何解决以下问题时遇到了麻烦:
1 - 我有一个包含某些人数据的表格,包括姓名,数字代码和每个人的类别。
让我们说“JOHN DOE”就是其中之一,他的号码是“1111”,他的类别是“A”; “FOO”是另一个,编号为“2222”,类别为“B”;而“BAR”是另一个,数字代码“3333”和类别“A”。
2 - 类别“A”中的每个人都被填写以填写填写我数据库中第二个表格的表格。在此表中,对每个答案的负责人的引用是他/她的号码。每个人也可以不止一次回答表格。
问题是:现在我需要一张表格,告诉我谁回答了表格,谁没有。
PS:让我们调用数据库“data_base”,第一个表“people”(带有“name”,“num_code”和“category”列)和第二个表“answers”(带有列“num_code”和“answer”)。
有人可以帮助我吗?
答案 0 :(得分:2)
这可以通过子查询简单地解决:
SELECT
`num_code`,
`name`,
(
SELECT COUNT(*)
FROM `answers`
WHERE `num_code` = `people`.`num_code`
) AS `AnswerCount`
FROM
`people`
ORDER BY
`name`
在SQL中有很多方法可以解决这个问题。上述结果格式的一个优点是您将获得每人的答案数。因此,如果它是0,那么你知道他们没有填写一个。
答案 1 :(得分:0)
您可以使用所谓的“LEFT JOIN”执行此操作。它获取people
中的所有记录,并将它们链接到answers
中的记录。然后使用where
子句,从结果中删除确实具有答案的所有记录,并且仅返回那些不具有答案的记录。
select
p.*
from
people p
left join answers a on a.num_code = p.num_code
where
a.num_code is null
另一种解决方案是使用NOT EXISTS。实际上使用它有点干净,但也有点复杂(你需要一个子选择)。它已证明(对我来说)在MySQL中较慢。