【发布时间】:2014-08-26 04:13:24
【问题描述】:
下面有我的 sql 查询,
select SQL_CALC_FOUND_ROWS * from `MYDATABASE`.`MYTABLE`
WHERE (Date(timestamp) BETWEEN '1970-01-01' and '2014-08-25')
and (COLA='') and (COLB = '') and COLC = '1'
AND (LIKE CLAUSE ON ANOTHER 10 COLUMNS) desc Limit 0, 10 ;
现在对于 ColA 和 COLB ,我有时会填充值,有时这些值要么是空字符串,要么是 Null 值,所以每当我得到这些值时,我的查询都不会返回任何行。我可以理解为什么我没有得到任何行,但是现在我的要求是每当我为这些列中的任何一个获取空值或空字符串时获取所有行。
我该怎么做?我尝试使用 is not Null,但这会破坏我的代码,因为当我将 null 值传递给 COLA 和 COLB 时它可能会起作用,但是当 COLA 具有有效值并且 COLB 传递为 null 时,它仍然会在我希望它满足 COLA 条件时提供所有记录?抱歉,我没有任何 DBA,因为我现在身兼数职。
实际查询如下所示,
select SQL_CALC_FOUND_ROWS * from `MYDATABASE`.`MYTABLE`
WHERE (Date(timestamp) BETWEEN '1970-01-01' and '2014-08-25')
and (COLA='someparameter captured from UI,it could be null or empty string') and (COLB = 'someparameter captured from UI,it could be null or empty string') and COLC = '1'
AND (LIKE CLAUSE ON ANOTHER 10 COLUMNS) desc Limit 0, 10 ;
select SQL_CALC_FOUND_ROWS * from MYTABLE WHERE (Date(timestamp) BETWEEN '1970-01-01' and 'CURRENTDATE') and COLA = ('12001'OR'12002') and COLB = ('VAL1'OR 'VAL2' OR 'VAL3' OR 'VAL4'OR 'VAL5'OR 'VAL6') and COLC = '1' and (COLD LIKE '%%' OR COLE LIKE '%%' OR COLF LIKE '%%' OR COLG LIKE '%%' OR COLH LIKE '%%' OR COLI LIKE '%%' OR COLM LIKE '%%' OR COLN LIKE '%%' OR COLP LIKE '%%') order by Date(timestamp) desc Limit 0, 100
【问题讨论】:
-
从哪里获得 where 子句的值以及如何创建此语句(代码?)
-
显示你的数据,需要更清楚的问题..!!
-
我有一个 java 类,它从 UI 中捕获值。此查询是 DAO 类的一部分。
-
Mahida,请说明您需要什么数据,COLA和COLB是字符串,在数据库中映射为varchar。
-
请检查我的答案。如果是这样,您应该仅根据最后一条 sql 简化您的问题。其他两个 sql 模板可能与您的问题无关。
标签: mysql