Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用if-else或not在oracle sql中进行条件连接_Sql_Oracle - Fatal编程技术网

使用if-else或not在oracle sql中进行条件连接

使用if-else或not在oracle sql中进行条件连接,sql,oracle,Sql,Oracle,如何在oracle sql中实现这一点我尝试了不同的方法。这里我提供了if-else查询,以了解我需要执行什么 if(SELECT SLS_CONT_NO FROM GL WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714') is not null then SELECT DISTINCT M.NAME FROM GL JOIN SALES_CONT SLS ON GL.SLS_CONT_NO = SLS.SLS_CONT_NO JOIN

如何在oracle sql中实现这一点我尝试了不同的方法。这里我提供了if-else查询,以了解我需要执行什么

if(SELECT SLS_CONT_NO FROM GL WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714') is not null
then
SELECT DISTINCT M.NAME FROM GL 
JOIN SALES_CONT SLS ON GL.SLS_CONT_NO = SLS.SLS_CONT_NO   
JOIN MARKETER M ON M.MKTRINIT = SLS.MKTRINIT
WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714';
ELSE
SELECT DISTINCT M.NAME FROM GL 
JOIN TANK TA ON GL.DEST_TANK=TA.TANK_NO  
JOIN MARKETER M ON M.MKTRINIT = TA.MKTRINIT
WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714';
end if

您可以使用CASE WHEN语句

SELECT CASE WHEN a.SLS_CONT_NO IS NOT NULL 
            THEN (SELECT DISTINCT M.NAME
                    FROM GL b
                    JOIN SALES_CONT SLS
                      ON b.SLS_CONT_NO = SLS.SLS_CONT_NO   
                    JOIN MARKETER M
                      ON M.MKTRINIT = SLS.MKTRINIT
                   WHERE b.INVNO = '67883' AND b.CUST_ID = '14714')
            ELSE (SELECT DISTINCT M.NAME
                    FROM GL c
                    JOIN TANK TA
                      ON c.DEST_TANK = TA.TANK_NO  
                    JOIN MARKETER M
                      ON M.MKTRINIT = TA.MKTRINIT
                   WHERE c.INVNO = '67883' AND c.CUST_ID = '14714')
             END AS NAME
 FROM GL a
WHERE a.INVNO = '67883'
  AND a.CUST_ID = '14714';

您可以使用CASE WHEN语句

SELECT CASE WHEN a.SLS_CONT_NO IS NOT NULL 
            THEN (SELECT DISTINCT M.NAME
                    FROM GL b
                    JOIN SALES_CONT SLS
                      ON b.SLS_CONT_NO = SLS.SLS_CONT_NO   
                    JOIN MARKETER M
                      ON M.MKTRINIT = SLS.MKTRINIT
                   WHERE b.INVNO = '67883' AND b.CUST_ID = '14714')
            ELSE (SELECT DISTINCT M.NAME
                    FROM GL c
                    JOIN TANK TA
                      ON c.DEST_TANK = TA.TANK_NO  
                    JOIN MARKETER M
                      ON M.MKTRINIT = TA.MKTRINIT
                   WHERE c.INVNO = '67883' AND c.CUST_ID = '14714')
             END AS NAME
 FROM GL a
WHERE a.INVNO = '67883'
  AND a.CUST_ID = '14714';

考虑使用
EXISTS/notexists
子句进行
UNION
查询,其中至少一个
SELECT
语句将返回:

SELECT M.NAME FROM GL 
JOIN SALES_CONT SLS ON GL.SLS_CONT_NO = SLS.SLS_CONT_NO   
JOIN MARKETER M ON M.MKTRINIT = SLS.MKTRINIT
WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714'
  AND EXISTS (SELECT SLS_CONT_NO FROM GL 
              WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714')

UNION

SELECT M.NAME FROM GL 
JOIN TANK TA ON GL.DEST_TANK = TA.TANK_NO  
JOIN MARKETER M ON M.MKTRINIT = TA.MKTRINIT
WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714'
  AND NOT EXISTS (SELECT SLS_CONT_NO FROM GL 
                  WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714')

考虑使用
EXISTS/notexists
子句进行
UNION
查询,其中至少一个
SELECT
语句将返回:

SELECT M.NAME FROM GL 
JOIN SALES_CONT SLS ON GL.SLS_CONT_NO = SLS.SLS_CONT_NO   
JOIN MARKETER M ON M.MKTRINIT = SLS.MKTRINIT
WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714'
  AND EXISTS (SELECT SLS_CONT_NO FROM GL 
              WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714')

UNION

SELECT M.NAME FROM GL 
JOIN TANK TA ON GL.DEST_TANK = TA.TANK_NO  
JOIN MARKETER M ON M.MKTRINIT = TA.MKTRINIT
WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714'
  AND NOT EXISTS (SELECT SLS_CONT_NO FROM GL 
                  WHERE GL.INVNO = '67883' AND GL.CUST_ID = '14714')

是否尝试union或left join()或nvl()?是否尝试union或left join()或nvl()?每个子查询必须返回一行。否则,查询将不会运行。每个子查询必须返回一行。否则您的查询将无法运行。UNION返回一组唯一的记录,因此不需要使用DISTINCT。@APC…正确。我没有仔细查看就保留了OP的原始查询。UNION返回一组唯一的记录,因此不需要使用DISTINCT。@APC…正确。我没有仔细看就保留了OP的原始查询。