我们有一个表,用于存储问题的答案。我们需要能够找到对特定问题有特定答案的用户。因此,如果我们的表包含以下数据:
user_id question_id answer_value
Sally 1 Pooch
Sally 2 Peach
John 1 Pooch
John 2 Duke
Run Code Online (Sandbox Code Playgroud)
并且我们想要找到回答问题 1 的“Pooch”和回答问题 2 的“Peach”的用户,以下 SQL 将(显然)不起作用:
select user_id
from answers
where question_id=1
and answer_value = 'Pooch'
and question_id=2
and answer_value='Peach'
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是为我们正在寻找的每个答案自行加入表格:
select a.user_id
from answers a, answers b
where a.user_id = b.user_id
and a.question_id=1
and a.answer_value = 'Pooch'
and b.question_id=2
and b.answer_value='Peach'
Run Code Online (Sandbox Code Playgroud)
这是有效的,但由于我们允许任意数量的搜索过滤器,我们需要找到更有效的东西。我的下一个解决方案是这样的:
select user_id, count(question_id)
from answers
where (
(question_id=2 and answer_value = 'Peach')
or (question_id=1 and answer_value = 'Pooch')
)
group …Run Code Online (Sandbox Code Playgroud) 我知道 MySQL 将 auto_increment 列限制为主键。为什么是这样?我的第一个想法是这是一个性能限制,因为某处可能有一些计数器表必须锁定才能获得此值。
为什么我不能在同一个表中有多个 auto_increment 列?
谢谢。