2016-11-15 65 views
0

想象一下在数据库中的 “家” 表中有7个外键:如何通过匹配的外键数量来定购SELECT语句?

  • 位置
  • 价格
  • 人口
  • 尺寸
  • 学校
  • 商店
  • 交通运输

(其中一些关系实际上是多对多的关系)。

我想显示房屋列表,按照匹配的外键数量降序排列。

最好的结果是所有7个外键都有值,包括多对多关系中的大量值。

下一个最好的结果是所有7个外键都有值,但在多对多关系中有更少的值。

下一个最好的结果是6个外键有一个值。

下一个最好的结果是5个外键有一个值。

依此类推,直到只有1个外键有值。

有没有办法在SQL中进行这种类型的排序?

谢谢。

+0

我用可怕的嵌套试图“情况下的东西,然后0,否则,1月底” ...... –

+1

你能以表格形式与您尝试查询,小提琴什么的ATLEAST共享虚拟数据? –

回答

0

这不是很简单,因为你必须检查所有的外键,所以你必须告诉所有这7个条件。 你可以把为了通过例如:

select 
    ... 
from 
    thistable 
order by 
    case when exists (select 1 from table1 where id=thistable.fk1) then 1 else 0 end + 
    case when exists (select 1 from table2 where id=thistable.fk2) then 1 else 0 end + 
    ... 
    desc 

所以更多的外国键已连接结果值越高会。

0

要检查外键是否有值不是太棘手。尝试是这样的:

SELECT ... 
    FROM MyTable 
    ORDER BY Case When fk1 Is Not Null Then 1 Else 0 End + 
    Case When fk2 Is Not Null Then 1 Else 0 + 
    ... DESC , 
    (Select Count(*) From ManyToManyTable1 Where MyTableID = MyTable.ID) + 
    (Select Count(*) From ManyToManyTable2 Where MyTableID = MyTable.ID) DESC