我认为我有一个简单的问题,但由于我缺乏数据库建模和SQL的经验,我无法得到正确的解决方案, 我可以绘制基本概念,但我很难实现解决方案
假设我有一些套装A,B和C.
A在B里面
B在C里面
A是B set
中具有最大值的10个对象的集合B是所有大于100的值的集合
C是所有大于50的值的集合
这很容易,
现在我需要获得50个具有C中最大值的对象,这些对象不在A中 我如何将该问题转换为SQL语言,或者我应该使用哪些命令,工具或设计模式来解决这个问题?
我不确定我是否足够清楚, 再次抱歉,如果问题对某些人来说太微不足道了,但我正在努力学习更多有关SQL和设计的知识。
我正在寻找一种不受框架或操作系统约束的通用解决方案
感谢您的帮助
答案 0 :(得分:2)
我假设您有一个t
列,value
列,标签“A”,“B”和“C”都基于这些。
select t.*
from t left outer join
(select value
from t
where value >= 100
order by value desc
limit 1
) A
on t.value = A.value
where t.value >= 50 and A.value is null
order by value desc
limit 50;
limit
的使用是特定于数据库的。 top
子句中可能是rownum
或where
或其他内容,具体取决于数据库。
编辑:
如果集合足够大,你可以这样做:
select t.*
from t
where value >= 50 and value < 100
order by value desc
limit 50;
答案 1 :(得分:0)
可能这个查询会有所帮助:
select Col1,Max(Col2) from
(select col1, col2 from TableC
Except
Select col1, col2 from TableA)as A
Group By Col1
这里内部查询只会选择表A中但不在表C中的记录,然后外部查询将占用这些记录的最大值。
答案 2 :(得分:0)
您好,我不确定我是否正确理解您的问题。如果我将A,B和C视为你的SQL表并假设它们之间存在某种关系,那么你可以编写类似
的查询SELECT C. * FROM C WHERE C.ID NOT IN
(选择B.ID来自B加入A B.ID = A.ID)
子查询(第二行)为您提供B和A之间共同的所有对象(基本上是A)。
我再次不确定这是否是您正在寻找的,如果您可以在这里分享您的真实生活场景将会有所帮助。
有关集合论和SQL理解,请参阅下面的文章
http://seanmehan.globat.com/blog/2011/12/20/set-theory-and-sql-concepts/