假设contentScrim
有3个属性:table1
,first_name
和last_name
。例如,使用以下元组:
country
我正在寻找有名字的人," John"或姓氏" Smith"或国家"美国":
John White Canada
John Smith France
Mary Smith Canada
Ben Smith Canada
Mary Black USA
我希望按以下顺序获得结果: 首先是姓名为John的人,然后是名字为smith的人,最后是那些有国家的人
我知道我可以编写以下3个不同的查询,然后按照我想要的顺序使用它们的输出:
SELECT *
FROM table1
WHERE
first_name='John' or
last_name='smith' or
country='US'
我正在寻找更好的方法。
问题1:如果我使用上面提到的3个查询并找到他们的联盟,订单会改变,对吧?如果是,我如何追加结果? 问题2:有更好的方法吗?答案 0 :(得分:5)
你的ORDER BY应该是
ORDER BY CASE
WHEN FIRST_NAME = 'John' THEN 1
WHEN LAST_NAME = 'smith' THEN 2
ELSE 3
END
答案 1 :(得分:1)
您可以在CASE
子句中使用ORDER BY
语句,如下所示:
SELECT -- We NEVER use SELECT *
first_name,
last_name,
country
FROM
Table1
WHERE
first_name = 'John' OR
last_name = 'Smith' OR
country = 'US'
ORDER BY
CASE WHEN first_name = 'John' THEN 0 ELSE 1 END,
CASE WHEN last_name = 'Smith' THEN 0 ELSE 1 END,
CASE WHEN country = 'US' THEN 0 ELSE 1 END