【问题标题】:SQL pull two records if one is selected in the drop down如果在下拉列表中选择了一条,则 SQL 拉两条记录
【发布时间】:2017-04-17 13:24:23
【问题描述】:

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

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

我知道我必须在WHERE 子句中使用CASE 语句来检查是否选择了英国然后包括英格兰。但我似乎无法得到它。

【问题讨论】:

  • 英格兰和英国有相同还是不同的 country_id?
  • 请显示示例数据和输出。我怀疑英格兰/英国是您表中唯一的边缘案例。
  • 如果是国中之国,不应该有subcountryID吗?

标签: sql oracle case where


【解决方案1】:
where (country_id = :country_id or (country_id = <UK> and country_id = <ENGLAND>))

Parens 在这里确实不是必需的,但是当 AND 和 OR 发挥作用时,很多人会忘记它们,所以我只是包装了这部分逻辑,以便您可以在其末尾添加更多过滤器。

假设您的 country_ids 是独一无二的,您的查询中不应该真的需要 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

【讨论】:

  • 为了清楚起见,:country_id = &lt;UK&gt; and country_id = &lt;ENGLAND&gt; 周围不应该还有括号吗? IE。 where (country_id = :country_id or (:country_id = &lt;UK&gt; and country_id = &lt;ENGLAND&gt;))
  • @Boneist 我会让你担任那个职位,但它肯定不是我的。我不介意明确一些事情,但到初中时,我们几乎都学会了乘法先于加法的惯例。我来自一所较老的开发人员学校,我希望人们应该知道 AND 和 OR 是具有相同优先级规则的相似之处。
  • 我知道我的 BODMAS,但无论出于何种原因,AND/OR 优先级从未真正困扰我。具有讽刺意味的是,恕我直言,您特别提到了括号,但后来跳过了一些。
  • 是的,我确实考虑过添加额外的一对。我想这是我难以克服的烦恼之一。不同之处在于一对重要而另一对不重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 2017-12-05
  • 2014-01-30
相关资源
最近更新 更多