是否有可能根据某些条件进行更改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 ...))
是否有可能根据某些条件进行更改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 ...))
是的。这应该是可能的。
如果我们假设date
和id
是列中(该不幸命名)表引用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)
谓词。
我想你太努力了。如果id是NULL
,这相当于where子句中有FALSE
。所以:
Select * from table1 where date="2016-07-19" and id=(select * from ...)
应该只匹配你想要的记录。如果id
是NULL
,你什么也得不到。
好的,我看到两个答案,一个是我的,用不同的方式解释了你想要的。所以,你可能想编辑这个问题来澄清你的意思是“什么都不做”。 – MAP