2016-12-02 46 views
1

我有一个表单,用户必须从下拉列表中选择一个国家,然后在下一页显示该国家/地区的结果。英格兰有意隐藏在表格中。但是,如果选择了英国,我需要同时显示英国和英格兰的下一个页面上的记录(合并结果,因此用户不知道有国家的差异。这是我的伪SQL查询如果在下拉列表中选择了一条SQL,则会拉两条记录

select DISTINCT country_id, country, language, abbreviation 
from countries 
where country_id = :country_id 

我知道我必须使用CASE语句WHERE子句中,以检查是否英国被选中,那么包括英格兰,但我似乎无法得到它。

+0

英格兰和英国有相同或不同的country_id吗? – jarlh

+0

请显示样本数据和输出。我怀疑英格兰/英国是你桌上唯一的边缘情况。 –

+1

如果这是一个国家的国家,是不是应该有一个子国ID? –

回答

0
where (country_id = :country_id or (country_id = <UK> and country_id = <ENGLAND>)) 

的括号真的没有必要在这里但很多当AND和OR发挥作用时,人们会忘记他们,所以我只是将这部分逻辑封装起来,以便添加更多的过滤器那就结束了。

并假设您的country_id是唯一的,您不应该在查询中确实需要DISTINCT

如果你真的很喜欢case表达式,那么这将是等价的,虽然没有什么特别的。我不确定第一个会给你一个更好的计划,但我认为这第二个更可能会更糟。

where 
    case 
     when :country_id = <UK> and country_id = <ENGLAND> 
     then :country_id -- treat England as though it's UK 
     else country_id 
    end = :country_id 
+0

为了清楚起见,不应该在':country_id = 和country_id = '附近有括号吗?即'在哪里(country_id =:country_id或(:country_id = 和country_id = ))' – Boneist

+0

@Boneist我会让你拥有那个位置,但它绝对不是我的。我不介意在初中阶段对某些事情进行明确的说明,我们都已经非常了解乘法在加法之前的惯例。我来自一个较早的开发者学校,我希望人们应该知道AND和OR是相同的优先规则。 – shawnt00

+0

我知道我的BODMAS,但是无论出于何种原因,AND/OR优先顺序从未真正卡住过我。这只是讽刺,恕我直言,你特别提到了括号,但后来略过了一些。 – Boneist

相关问题