我在 mysql/SQL Server 中有以下要求
Table Name: basic(pid int,av int,sid int,st int,wid int,wt int)
对于每个 pid,将有 10 行(包含每个 pid 的 sid,st 值和 wid,wt 值)。这些集合可以是 1 到 10。
因此,对于 pid 值(例如:3213 和 3214),将有 10 行,如下所示
像上面一样,可能有数百万条记录
我想要实现的是,我想要获取其(sid=2和相应的st>=7)以及其(wid=9和相应的wt>=6)的pid
如果我应用这个条件,我应该得到 pid 列表,其中必须有两个 pid 3213 和 3214。
如何使用简单的 SQL 查询来实现此目的,或者我可以将表分为三个,如 basic1(pid,av)、basic_sk(pid,sid,st) 和 basic_wc(pid,wid,wt)
因为我可以使用pid作为引用,所以我可以加入..即使我尝试使用加入,也无法达到所需的结果。
我使用了下面的连接 -
select t1.pid from basic1 t2
inner join basic_sk t2 on t1.pid=t2.pid
inner join basic_wc t3 on t3.pid=t2.pid
where (((t2.sid=2) and (t2.st>=7)) and ((t3.wid=9) and (t3.wt>=6)))
但没有运气。 如果我在 where 条件下有多个 sid 和 st 值以及 wid 和 wt 值怎么样? 就像集合 {sid=2,st>=7} 和 {sid=4,st>=9} 和 {wid=9,wt>=6} 和 {wid=5,wt>=5}
如何使用简单的sql查询来实现我的要求?
任何可能性对我来说都可以,一张表或多张表(使用连接)
最佳答案
一种方法是使用聚合和having子句;
select b.pid
from basic b
group by p.pid
having sum(case when (b.sid = 2) and (b.st >= 7) then 1 else 0 end) > 0 and
sum(case when (b.wid = 9) and (b.wt >= 6) then 1 else 0 end) > 0;
having
子句中的每个条件都会对与每个条件匹配的行进行计数。 > 0
确保每一行至少有一行。
关于mysql - 当每个 id 有多行时应用 where 条件(单个表或连接多个表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33963186/