【发布时间】:2017-03-06 10:33:03
【问题描述】:
我对 SQL 有点陌生。我试图做的是按匹配标准的降序对行进行排序。 当我说匹配条件时,我的意思是那些与我的 SQL 查询有更多匹配列的行应该排在第一位。喜欢
SELECT a.*,
f.*
FROM a
INNER JOIN f as f
ON f.fid = a.aid
WHERE ( a.icid = 25290
AND a.pt = 2 )
AND ( f.st LIKE '%Outpatient%'
OR f.st LIKE '%Service201%' )
现在我的行的顺序应该是,如果它匹配所有它应该排在最前面,那么第二个应该是匹配除 F.ST 之外的所有列的那个,然后依此类推。
例子
我在表名 Test 中有 5 列 列的名称是
id, name, fname, city, country
我的查询
SELECT *
FROM TEST
WHERE name LIKE "%John%"
OR fname LIKE "%Mike%"
OR city IN ("Abu Dhabi, New York, Manchester")
OR country IN ("USA, UAE, UK")
假设我有 10 行针对此查询。 我想要的是匹配所有的行应该在结果集的顶部 喜欢关注
姓名、姓氏、城市、国家
John, Mike, New York, USA -> 匹配所有四个字段
John, Mike, Delhi, UK -> 匹配三个字段
John, Khan, Lahore, USA -> 匹配两个字段
John, Khan, Lahore, PK -> 匹配一个字段
John Mike, Khan, Lahore, PK -> 匹配一个字段
【问题讨论】:
-
如果您添加示例数据和预期结果,可能会更清楚,您会得到更多答案
-
如果要订购必须使用sql
IF()like matches -
打破您的查询并使用 union all
-
我可以有一个示例代码,请问如何做到这一点。
-
@GuidoG 我添加了一些示例代码。你从中得到什么?谁能实现我想做的事。