有什么比这更好的SQL语句?

时间:2018-03-14 18:38:56

标签: mysql sql group-by having

两个表P,W通过组外键连接。下面的内部SQL只返回表P'name',它在W表中只有一个匹配的'type'。外部SQL显示名称和类型列值。

基本上我只需要检索只有一种类型(W)的名字(p)。

下面的声明是正确的,但是,我想知道如果没有内部SQL或任何其他更好的解决方案我能做到。

select p.name, w.type
from p, w
where p.name in
(
    select p.name
    from P , w 
    where p.group = w.group
    group by p.name
    having count(w.type) = 1
)
AND 
p.group= w.group

1 个答案:

答案 0 :(得分:1)

如果您只有一种类型,它也始终是最大(和最小)值。因此,您可以在没有外部查询的情况下简化对此值的检索:

select p.name, max(w.type) as type
from p
join w on p.group = w.group
group by p.name
having count(w.type) = 1

1:n - 关系中(例如,一个名称只属于一个组,因为name是主键,所以你在这里),你通常只需group by w select p.name, w.type from p, w where p.group in ( select w.group from w group by w.group having count(w.type) = 1 ) AND p.group= w.group 1}};这将简化您的内部查询(与原始查询相比,它可以节省一个连接),但更通用(例如,对于不同的计数):

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
    Messaging.messaging().subscribe(toTopic: "/topics/testTopic")
}