MySQL IF在Where子句上

时间:2016-07-19 23:00:55

标签: mysql where

是否可以根据某些条件进行更改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)

2 个答案:

答案 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 ...)

应该只匹配您想要的记录。如果idNULL,则一无所获。