2016-12-02 9 views
1

ドロップダウンから国を選択する必要があるフォームがあり、その国の結果が次のページに表示されます。イングランドは意図的にフォームに隠されています。しかし、イギリスが選択されている場合、私は(次ページにイギリスとイングランドの両方の結果を表示する必要が組み合わされた結果、ユーザーよう国に差がある知っていません。ここでは私の擬似SQLクエリはドロップダウンで1つが選択されている場合、SQLは2つのレコードを取り出します

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

です私はその後、イングランドを含め、私はイギリスが選択されているかどうかを確認するためにWHERE句でCASEステートメントを使用する必要があります知っている。しかし、私はそれを得るように見えることはできません。

+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 =(0120)国:とcountry_id = )' – Boneist

+0

@Boneist私はあなたにそのポジションを持たせますが、それは確かに私のものではありません。私はいくつかのことについては明示的に気にしませんが、中学生は乗算が加算に先行するという慣習を学んでいます。私は古い開発者の学校から来ており、ANDとORは同じ優先順位ルールと並行していることを人々が知っていることを期待しています。 – shawnt00

+0

私は自分のBODMASを知っていますが、AND/ORの優先順位は、何らかの理由で本当に私と付き合ったことはありません。 IMHOという、ちょっと皮肉なことですが、あなたは特に大括弧について言及しましたが、いくつかを省略しました。 – Boneist

関連する問題