想象一下,数据库中的“house”表有7个外键:
(有些关系实际上是多对多关系)。
我想显示一个房屋列表,按照匹配的外键数量的降序排序。
最好的结果是所有7个外键都有值,包括多对多关系中的大量值。
下一个最好的结果是所有7个外键都具有值,但在多对多关系中具有较少的值。
下一个最好的结果是6个外键有一个值。
下一个最好的结果是5个外键有一个值。
依此类推,直到只有一个外键有值。
有没有办法在SQL中进行这种类型的排序?
谢谢。
答案 0 :(得分: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
因此,连接记录的外键越多,该值就越高。
答案 1 :(得分: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