我有一個查詢,我需要一些幫助 - 作爲表格的一部分,我有一個序列號字段填充,如果有序列號,空白if如果它是無效的序列號,則不是,或者沒有結果。MySQL查詢 - 只有確切結果或每一個選擇
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給客戶和合同名稱,但意識到我很早就得到了垃圾。 我試圖試圖簡化它,說第三種情況可能不會成立(即,如果它是一個無效的序列號,允許選擇任何客戶名稱,並簡單地在數據中標記它) 有沒有人有任何想法我哪裏錯了?條件的組合顯然是錯誤的,我無法弄清楚如何使每條邊或者語句相互排斥 即使我試圖只評估if(sn ='blah'),我也會得到明顯的錯誤結果原因,但不能想出一個明智的方式來表達它。 非常感謝 Scott
難道也許是更簡單的有兩個查詢?嘗試並得到你的特定結果(選擇* where serial_no == XXXXXX),然後如果你沒有得到結果(或者0,或null或者你想測試的任何東西),那麼你可以做一個查詢來獲得每一個選擇)? – nbsp 2012-07-09 04:56:26
我不確定我是否完全理解你的問題。如果沒有序列號等於'C20050',你是否希望查詢返回所有行,但是如果有的話只返回一行? – 2012-07-09 05:00:08
嗨贊恩 - 沒錯。 – Scott 2012-07-09 05:54:47