考虑下表:
Persons
|id |firstname|lastname|
|-----|---------|--------|
|1 |John |Doe |
|2 |Jim |Smith |
|3 |Jane |Boggard |
|4 |Joe |Dash |
Licences
|p_id |licence|
|-----|-------|
|1 |car |
|1 |bike |
|2 |car |
|3 |car |
|3 |bike |
|1 |plane |
|4 |bike |
我怎样才能得到在licenses表中只有一个相关行并且值为“car”的人(在我们的例子中:吉姆·史密斯)
谢谢
2条答案
按热度按时间rpppsulh1#
这应该有助于说明这个过程。。。
xxhby3vn2#
你的问题的第一部分很简单(让一个人在一行中只有一个相关联的行)
licenses
表)。你只要做一个GROUP BY
,然后HAVING COUNT(*) = 1
:你的问题的第二部分是一个小把戏:对于只有一张驾照的人来说,他们有一张汽车驾照。为此,可以将过滤器应用于
HAVING
子句,所以在group by
. 例如(注意新的最后一行):你用的是
MIN
函数,因为通常需要在having子句中应用聚合函数。但是,既然您已经知道所有这些人只有一个许可证,那么MIN
其实没什么区别(你甚至可以MAX
结果相同)。