是否可以根据某些条件进行更改where子句的查询?例如,我想从table1中选择*,其中数据是19 / July / 2016但是如果field id为null则不执行任何操作,否则将id与其他内容进行比较。喜欢下面的查询?
@Core.receiver('onstart')
def _starting(self, sender, **kwargs):
""" Starting of the platform
:param sender:
:param kwargs:
:return:
"""
...
# Registers dynamic route.
self.vip.rpc.call(MASTER_WEB, 'register_agent_route',
r'^/jsonrpc.*',
self.core.identity,
'jsonrpc').get(timeout=30)
# Registers static route.
self.vip.rpc.call(MASTER_WEB, 'register_path_route', VOLTTRON_CENTRAL,
r'^/.*', self._webroot).get(timeout=30)
答案 0 :(得分:0)
是。这应该是可能的。
如果我们假设 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)
谓词。
答案 1 :(得分:0)
我觉得你太努力了。如果id为NULL
,则相当于where子句中包含FALSE
。所以:
Select * from table1 where date="2016-07-19" and id=(select * from ...)
应该只匹配您想要的记录。如果id
为NULL
,则一无所获。