ヘルプが必要なクエリがあります - フォームの一部として、シリアル番号がある場合は入力されるシリアル番号フィールドがあり、シリアル番号がない場合は空白になり、シリアル番号が無効な場合は結果がありません。
select *
from cust_site_contract as cs
where cs.serial_no = 'C20050' or (cs.serial_no <> 'C20050' and if(cs.serial_no = 'C20050',1,0)=0)
limit 10;
通常のデータのサンプルを次に示します。
+----------------------+-----------+-----------+-----------
| idcust_site_contract | system_id | serial_no | end_date
+----------------------+-----------+-----------+-----------
| 561315 | SH001626 | C19244 | 2009-12-21
| 561316 | SH001626 | C19244 | 2010-06-30
| 561317 | SH002125 | C19671 | 2010-05-31
| 561318 | SH001766 | C14781 | 2010-09-25
| 561319 | SH001766 | C14781 | 2011-02-15
| 561320 | SH002059 | C19020 | 2008-07-09
| 561321 | SH002639 | C18889 | 2008-03-31
| 561322 | SH002639 | C18889 | 2008-06-30
| 561323 | SH002715 | C20051 | 2010-04-30
| 561324 | SH002719 | C20057 | 2010-04-30
正確な結果は次のようになります。
| 561487 | SH002837 | C20050 | 2012-07-04
これをサブクエリとして書いていたので、system_ids を顧客名と契約名に一致させることができましたが、かなり早い段階でガベージを取得していることに気付きました。3 番目のケースは当てはまらない可能性がある (つまり、無効なシリアル番号の場合、任意の顧客名の選択を許可し、データでフラグを立てるだけです) と言って単純化しようと思います。間違ってる?条件の組み合わせが明らかに間違っており、or ステートメントの両側を相互に排他的にする方法がわかりません。if(sn = 'blah') だけを評価しようとしても、明らかな理由で間違った結果が得られます。 、しかし、それを適切に表現する方法が思い浮かびません。どうもありがとうスコット