使用if-else或not在oracle sql中进行条件连接
如何在oracle sql中实现这一点我尝试了不同的方法。这里我提供了if-else查询,以了解我需要执行什么使用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
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的原始查询。