微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有一个简单的查询可以解决这个难题?

如何解决是否有一个简单的查询可以解决这个难题?

我正在这里进行个人项目/开发。接受了星际舰队司令部的一份工作,查询我们的星际飞船舰队库存。我想查询 Features 表并返回与功能列表匹配的 starshipId 列表。我想出的最好的是一个将返回任何一个匹配项的查询。但是,我想为具有查询中列出的所有功能的星舰返回 starshipid。请看图。

到目前为止我尝试过的:

select distinct starshipid
from features
where description in ('Teleporation','Warp Speed')

我正在寻找一个只会返回 starshipid: 1000 的查询

Data sample

解决方法

如果你只需要得到那些在 IN 子句中提到的所有描述的 startshipid,那么在 HAVING 子句中使用计数和不同。您的查询将如下所示:

SELECT STARSHIPID
FROM FEATURES
WHERE DESCRIPTION IN ('TELEPORATION','WARP SPEED')
GROUP BY STARSHIPID
HAVING COUNT(DISTINCT DESCRIPTION) = 2
,

你很近。如果你知道条件不重叠,你可以计算它们

select starshipid
from features
where description in ('Teleporation','Warp Speed')
group by starshipid
having count(*) = 2

它应该适合您的场景,只是要注意更复杂的查询。想象一下这张桌子

FeatureId StarshipId 描述
1 1000 强化钢盾
2 1000 激光屏蔽
select starshipid
from features
where description like '%shield%' or description like '%warp%'
group by starshipid
having count(*) = 2

它会返回这艘船,即使没有满足经线条件,因为在两个特征中都满足了盾牌条件。

它不会退回这艘船

select starshipid
from features
where description like '%steel%' or description like '%enhanced%'
group by starshipid
having count(*) = 2

因为即使满足所有条件,它也只是一个功能

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?