我有一个查询,我需要一些帮助 - 作为表格的一部分,我有一个序列号字段填充,如果有序列号,空白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