如何在 INFORMIX 的 where 子句中使用 if 语句?
How to use if statement within where clause in INFORMIX?
我有以下查询,数据库是 INFORMIX:
有谁知道如何通过示例或参考来实现它?我在 Informix 文档和 google 中进行了搜索,但找不到任何有用的方法来解决这个问题。
select i.doc_nr, i.doc_mut, i.year, i.mode, i.tb, i.patientid
from tdba.include as i, t3
where i.year = t3.year
AND i.mode= t3.mode
AND i.tb=t3.tb
AND i.doc_mut= t3.doc_mut
-- here I wanna add another AND condition namely i.patientid= t3.patientid based on the following condition as a subquery.
EXISTS(SELECT omw_nr FROM tdba.aggromw AS omw WHERE omw.omw_nr = i.doc_mut)
您应该能够在 WHERE 子句中使用 CASE 表达式。
https://www.ibm.com/support/knowledgecenter/en/SSGU8G_12.1.0/com.ibm.sqlt.doc/ids_sqt_080.htm
像这样:
CREATE TABLE tdba.include (doc_nr int, doc_mut int, year int, mode int, tb int, patientid int);
CREATE TABLE t3( year int, mode int, tb int, doc_mut int, patientid int);
CREATE TABLE tdba.aggromw (omw_nr int);
INSERT INTO tdba.include VALUES (1,1,1,1,1,13);
INSERT INTO t3 VALUES (1,1,1,1,14);
'subselect'中没有数据 table:
SELECT i.doc_nr, i.doc_mut, i.year, i.mode, i.tb, i.patientid
FROM tdba.include as i, t3
WHERE i.year = t3.year
AND i.mode= t3.mode
AND i.tb=t3.tb
AND i.doc_mut= t3.doc_mut
AND i.patientid = CASE when EXISTS(SELECT omw_nr FROM tdba.aggromw AS omw WHERE omw.omw_nr = i.doc_mut)
then t3.patientid
else i.patientid
END
;
> ;
-------
doc_nr doc_mut year mode tb patientid
1 1 1 1 1 13
1 row(s) retrieved.
用一行进入 'aggromw' table EXISTS returns 'true' 这将 'force' 'i.patientid=t3.patientid' filter
INSERT INTO tdba.aggromw VALUES (1);
SELECT i.doc_nr, i.doc_mut, i.year, i.mode, i.tb, i.patientid
FROM tdba.include as i, t3
WHERE i.year = t3.year
AND i.mode= t3.mode
AND i.tb=t3.tb
AND i.doc_mut= t3.doc_mut
AND i.patientid = CASE when EXISTS(SELECT omw_nr FROM tdba.aggromw AS omw WHERE omw.omw_nr = i.doc_mut)
then t3.patientid
else i.patientid
END
;
-------
doc_nr doc_mut year mode tb patientid
No rows found.
>
我有以下查询,数据库是 INFORMIX: 有谁知道如何通过示例或参考来实现它?我在 Informix 文档和 google 中进行了搜索,但找不到任何有用的方法来解决这个问题。
select i.doc_nr, i.doc_mut, i.year, i.mode, i.tb, i.patientid
from tdba.include as i, t3
where i.year = t3.year
AND i.mode= t3.mode
AND i.tb=t3.tb
AND i.doc_mut= t3.doc_mut
-- here I wanna add another AND condition namely i.patientid= t3.patientid based on the following condition as a subquery.
EXISTS(SELECT omw_nr FROM tdba.aggromw AS omw WHERE omw.omw_nr = i.doc_mut)
您应该能够在 WHERE 子句中使用 CASE 表达式。
https://www.ibm.com/support/knowledgecenter/en/SSGU8G_12.1.0/com.ibm.sqlt.doc/ids_sqt_080.htm
像这样:
CREATE TABLE tdba.include (doc_nr int, doc_mut int, year int, mode int, tb int, patientid int);
CREATE TABLE t3( year int, mode int, tb int, doc_mut int, patientid int);
CREATE TABLE tdba.aggromw (omw_nr int);
INSERT INTO tdba.include VALUES (1,1,1,1,1,13);
INSERT INTO t3 VALUES (1,1,1,1,14);
'subselect'中没有数据 table:
SELECT i.doc_nr, i.doc_mut, i.year, i.mode, i.tb, i.patientid
FROM tdba.include as i, t3
WHERE i.year = t3.year
AND i.mode= t3.mode
AND i.tb=t3.tb
AND i.doc_mut= t3.doc_mut
AND i.patientid = CASE when EXISTS(SELECT omw_nr FROM tdba.aggromw AS omw WHERE omw.omw_nr = i.doc_mut)
then t3.patientid
else i.patientid
END
;
> ;
-------
doc_nr doc_mut year mode tb patientid
1 1 1 1 1 13
1 row(s) retrieved.
用一行进入 'aggromw' table EXISTS returns 'true' 这将 'force' 'i.patientid=t3.patientid' filter
INSERT INTO tdba.aggromw VALUES (1);
SELECT i.doc_nr, i.doc_mut, i.year, i.mode, i.tb, i.patientid
FROM tdba.include as i, t3
WHERE i.year = t3.year
AND i.mode= t3.mode
AND i.tb=t3.tb
AND i.doc_mut= t3.doc_mut
AND i.patientid = CASE when EXISTS(SELECT omw_nr FROM tdba.aggromw AS omw WHERE omw.omw_nr = i.doc_mut)
then t3.patientid
else i.patientid
END
;
-------
doc_nr doc_mut year mode tb patientid
No rows found.
>