【问题标题】:Can I use MySQL ifnull with a select statement?我可以将 MySQL ifnull 与 select 语句一起使用吗?
【发布时间】:2012-06-24 06:35:48
【问题描述】:

我正在尝试以下操作,但无法找出问题所在:

IF( IFNULL(
      SELECT * FROM vertreter AS ag 
      WHERE ag.iln = param_loginID 
      AND ag.verkaeufer = param_sellerILN
      ),
      UPDATE vertreter AS agUp
      SET agUp.vertreterkennzeichen
      WHERE agUp.iln = param_loginID AND agUp.verkaeufer = param_sellerILN
      ,
      INSERT INTO vertreter AS agIn
          ( agIn.iln, agIn.verkaeufer, agIn.vertreterkennzeichen, agIn.`status` )
      VALUES
          ( param_loginID, param_sellerILN, param_agentID, 'Angefragt' )
      );

问题:
这是否有可能,检查 SELECT 是否返回 NULL,然后根据情况执行 A 或 B?

【问题讨论】:

  • IFNULL 只能用于列,不能用于行。你想达到什么目标? PS:您不能在一个查询中将更新与插入和选择混合使用
  • 您可能需要一个存储过程来实现这一点
  • @zerkms:我需要检查一个条目是否在表“vertreter”中,如果是,我需要更新条目,如果不是,我需要创建一个新条目。以上内容已经在存储过程中。只是无法让它工作。感谢您的帮助!

标签: mysql select ifnull


【解决方案1】:

您需要创建唯一的复合索引(iln + verkaeufer)

CREATE UNIQUE INDEX vertreter_iln_verkaeufer ON vertreter (iln, verkaeufer)

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

然后您可以在一个查询中执行此操作:

INSERT INTO vertreter
(agIn.iln, agIn.verkaeufer, agIn.vertreterkennzeichen, agIn.`status`)
VALUES (param_loginID, param_sellerILN, param_agentID, 'Angefragt')
ON DUPLICATE KEY UPDATE vertreterkennzeichen = param_agentID

文档:http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html

【讨论】:

  • 听起来不错。以前没有头这个。所以我正在插入,如果有匹配的记录,我只是在更新?
  • @frequent: 是的,但是“匹配记录”是由唯一索引重复标识的,所以不要忘记创建它(我在答案的第一行中提到过)
  • 我迷路了。如何声明唯一复合索引? "iln" 是唯一值,但我在哪里声明呢?
  • @zerksm:谢谢!我必须玩这个,因为我不知道我在做什么:-)
  • @zerksm:似乎有效。但是我还是不明白为什么需要复合索引。从您的第二个 sn-p 开始,我将插入“Vertreter”(col. A、B、C、D)(val. 1、2、3、4)和 ON DUPLICATE KEY,当 vertreterkennzeichen 与 param_agent_id 匹配时发现,当前行已更新。那么复合索引有什么作用呢?
猜你喜欢
  • 2011-02-08
  • 2015-09-21
  • 2016-01-02
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 2020-08-04
  • 2022-09-15
相关资源
最近更新 更多