下面的SQL查询是否高效?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了下面的SQL查询是否高效?相关的知识,希望对你有一定的参考价值。
SQL查询问题。找出除了自己以外的所有动物。
我写了以下的查询& 给出结果,但我想知道的是
有没有其他更好的方法?
SQL查询 -
select * from [dbo].Animal a
where (
(
(select COUNT(distinct id) from [dbo].Animal b
where b.id <> a.id)
=
(select COUNT(*) from [dbo].Food
where pId = a.id and aId <> a.id)
)
AND
(select COUNT(*) from [dbo].Food
where pId = a.id and aId = a.id) = 0
)
动物桌
id name
--------
1 Ant
2 Bear
3 Cat
4 Dog
食物表(这里的pId是捕食者的ID)。
pId aId
-------
1 2
1 3
1 4
2 1
2 2
2 3
2 4
3 1
3 2
3 4
答案
嗯......。我会使用聚合。
select pid
from food
group by pid
having count(*) = (select count(*) - 1 from animal) and
sum(case when aid = pid then 1 else 0 end) = 0
这里 是一个db<>提琴。
另一答案
从戈登提供的小支线。 由于他的查询是明确地排除了自我通过援助<>pid,这是让#2被包括在列表中。 我会在那些DO吃自己的人身上再加一个LEFT JOIN,并确保其不是其中一个
select
f.pid
from
food f
-- this is looking for the current predator
-- in the food table and it allows itself to eat itself
LEFT JOIN food f2
on f.pid = f2.pid
AND f2.pid = f2.aid
where
f.aid <> f.pid
-- and it is NOT a cannibalistic animal,
-- hence we do NOT want to find in the left join of F2
AND f2.pid is NULL
group by
f.pid
having
count(*) = (select count(*) - 1 from animal);
以上是关于下面的SQL查询是否高效?的主要内容,如果未能解决你的问题,请参考以下文章
怎么把下面的的sql语句查询出来的结果插入到一张新表中去 求大神帮忙
sql [SQL查询片段]用于在命令行或通过R和其他工具使用SQL的快速代码段#tags:sql,R,text processing,命令li