2012-06-21 53 views
1

我想以下,并且不能找出什么是错的:我可以在select语句中使用MySQL ifnull吗?

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取决于?

+2

'IFNULL'只能与列,而不是行使用。你想实现什么? PS:你不能在一个查询中插入和选择更新 – zerkms

+0

你可能需要一个存储过程来实现这个 – codingbiz

+0

@zerkms:我需要检查一个条目是否在表“vertreter”中,如果是,我需要更新条目如果没有,我需要做一个新的条目。以上是已存在的proc内部。只是不能得到它的工作。感谢帮助! – frequent

回答

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

+0

听起来不错。以前没有过。所以我插入,如果有匹配的记录,我只更新? – frequent

+1

@frequent:是的,但是“匹配记录”是由唯一的索引副本标识的,所以不要忘记创建它(我在回答的第一行中提到过) – zerkms

+0

我迷路了。我如何声明唯一的组合索引? “iln”是唯一的价值,但我在哪里申报? – frequent

相关问题