Mysql 如何为插入到选择块中的一列检查两个不同的条件?

Mysql 如何为插入到选择块中的一列检查两个不同的条件?,mysql,sql,database,Mysql,Sql,Database,所以请容忍我。用Oracle-MySql编写 我有一段代码,主要是为了向DWCUST添加行,但通过将来自a2custbris的无效性别值与GenderSpilling表进行比较,将其更改为有效的性别值。我在括号中编写了select代码来实现这一点,它很有效。但是,某些性别值在a2custbris中为空,我希望这些值在DWCUST中写为“U”。那我怎么能两者兼得呢 代码如下: 插入DWCUST DWCUSTID、DWSOURCEIDBRIS、DWSOURCEIDMELB、名字、姓氏、性别、电话、邮

所以请容忍我。用Oracle-MySql编写

我有一段代码,主要是为了向DWCUST添加行,但通过将来自a2custbris的无效性别值与GenderSpilling表进行比较,将其更改为有效的性别值。我在括号中编写了select代码来实现这一点,它很有效。但是,某些性别值在a2custbris中为空,我希望这些值在DWCUST中写为“U”。那我怎么能两者兼得呢

代码如下:

插入DWCUST DWCUSTID、DWSOURCEIDBRIS、DWSOURCEIDMELB、名字、姓氏、性别、电话、邮政编码、城市、州、CUSTCATNAME 选择dwcustSeq.nextval、cb.custid、Null、cb.fname、cb.sname,从genderspelling gs中选择trimgs.NEW_值,其中uppergs.INVALID_值=uppercb.GENDER、cb.phone、cb.postcode、cb.city、cb.state、cc.custcatname 来自布里斯班 自然连接类别cc 其中cb.rowid在SELECT source_rowid FROM A2ERROREVENT中,其中filterid=7; 感谢您的帮助

使用大小写表达式:

INSERT INTO DWCUST (DWCUSTID, DWSOURCEIDBRIS, DWSOURCEIDMELB, FIRSTNAME, SURNAME,
                    GENDER, PHONE, POSTCODE, CITY, STATE, CUSTCATNAME)
SELECT
  dwcustSeq.nextval, cb.custid, Null, cb.fname, cb.sname, 
  CASE WHEN cb.gender IS NULL THEN 'U' 
       ELSE (select trim(gs.NEW_VALUE) FROM genderspelling gs
             WHERE upper(gs.INVALID_VALUE) = upper(cb.GENDER))
  END,
  cb.phone, cb.postcode, cb.city, cb.state, cc.custcatname
FROM a2custbris cb
NATURAL JOIN a2custcategory cc
WHERE cb.rowid IN (SELECT source_rowid FROM A2ERROREVENT where filterid = 7);
如果您希望“U”表示在性别拼写中不匹配的每个值,请改用COALESCE:


非常符合我的要求,谢谢!但是我错插了,不是检查null,而是要检查cb.gender是否与genderspelling中的任何值匹配,因为这将包括null值和不为null但与genderspelling中的任何值都不匹配的值,我如何调整您的代码以在执行其他检查之前执行此检查?如果有帮助的话,genderspelling有两列,new_value和invalid_value好的,当子查询返回null时,您需要'U'。我相应地更新了我的答案。另一方面:自然连接很容易出错,因为以后向表中添加列可能会导致现有查询的奇怪结果。所以,最好养成不使用它们的习惯。另外,永远不要为了以后使用而存储rowid。他们可以改变。仅在同一事务内使用ROWIDs。
INSERT INTO DWCUST (DWCUSTID, DWSOURCEIDBRIS, DWSOURCEIDMELB, FIRSTNAME, SURNAME,
                    GENDER, PHONE, POSTCODE, CITY, STATE, CUSTCATNAME)
SELECT
  dwcustSeq.nextval, cb.custid, Null, cb.fname, cb.sname, 
  COALESCE(
    (select trim(gs.NEW_VALUE) FROM genderspelling gs
     WHERE upper(gs.INVALID_VALUE) = upper(cb.GENDER))
  , 'U'),
  cb.phone, cb.postcode, cb.city, cb.state, cc.custcatname
FROM a2custbris cb
NATURAL JOIN a2custcategory cc
WHERE cb.rowid IN (SELECT source_rowid FROM A2ERROREVENT where filterid = 7);