2016-07-19 23 views
-1

是否有可能根据某些条件进行更改where子句的查询?例如,我想从table1中选择*,其中数据是19/July/2016,但如果字段ID为null,则不执行任何操作,否则将id与其他值进行比较。像下面的查询一样?MySQL如果在Where子句

Select * from table1 where date="2016-07-19" if(isnull(id),"",and id=(select * from ...)) 
+0

好的,我看到两个答案,一个是我的,用不同的方式解释了你想要的。所以,你可能想编辑这个问题来澄清你的意思是“什么都不做”。 – MAP

回答

0

是的。这应该是可能的。

如果我们假设dateid中(该不幸命名)表引用table1,如果我理解你正在试图达到什么样的,我们可以写像查询这样的:

SELECT t.id 
     , t.date 
     , t.... 
    FROM table1 t 
    WHERE t.date='2016-07-19' 
    AND ( t.id IS NULL 
     OR t.id IN (SELECT expr FROM ...) 
     ) 

这也有可能纳入MySQL的IF()IFNULL()功能,如果有一定的要求做。

只要在语句提交到数据库后动态更改SQL语句的文本,不,这是不可能的。在生成SQL语句时,需要完成对SQL文本的任何动态更改,提交给数据库。

我的个人偏好是使用连接操作而不是IN (subquery)谓词。

0

我想你太努力了。如果id是NULL,这相当于where子句中有FALSE。所以:

Select * from table1 where date="2016-07-19" and id=(select * from ...) 

应该只匹配你想要的记录。如果idNULL,你什么也得不到。