如何将这两个SELECT语句合并到一个

时间:2020-08-31 08:52:19

标签: oracle plsql

我有一个类似这样的MySQL查询:

if($wr_id) {
            $sql = "SELECT 
                        csi.*, 
                        aa.Name 
                    FROM 
                        completed_supplier_invoices csi
                    INNER JOIN 
                        ata_articles aa
                    ON 
                        aa.Id = csi.MaterialArticleId
                    WHERE 
                        aa.AtaId = $ata_id
                    AND 
                        aa.wrId = $wr_id";
        } else {
            $sql = "SELECT 
                        csi.*, 
                        aa.Name 
                    FROM 
                        completed_supplier_invoices csi
                    INNER JOIN 
                        ata_articles aa
                    ON 
                        aa.Id = csi.MaterialArticleId
                    WHERE 
                        aa.AtaId = $ata_id";
        } 

我需要在Oracle SQL中编写这些查询,由于我在Oracle SQL中没有足够的经验,因此在这里我对这两个SELECT语句有些困惑。

到目前为止,我尝试使用UNION,但是我不确定这是否是一个好的解决方案,到目前为止,我不确定结果是否正确。

有人可以指导我并告诉我如何解决这个问题吗?

我将非常感谢

我的解决方案

 SELECT 
                        csi.*, 
                        aa.Name 
                    FROM 
                        completed_supplier_invoices csi
                    INNER JOIN 
                        ata_articles aa
                    ON 
                        aa.Id = csi.MaterialArticleId
                    WHERE 
                        aa.AtaId = 2014
                    AND 
                        aa.wrId = 355
                        UNION
                     SELECT 
                        csi.*, 
                        aa.Name 
                    FROM 
                        completed_supplier_invoices csi
                    INNER JOIN 
                        ata_articles aa
                    ON 
                        aa.Id = csi.MaterialArticleId
                    WHERE 
                        aa.AtaId = 2014

1 个答案:

答案 0 :(得分:0)

类似以下的方法应该起作用:

SELECT 
    csi.*,
    aa.Name
FROM completed_supplier_invoices csi
INNER JOIN ata_articles aa
    ON aa.Id = csi.MaterialArticleId
WHERE
    aa.AtaId = $ata_id AND
    (aa.wrId = $wr_id OR $wr_id IS NULL);

未定义$wr_id(即NULL)时,第一个查询中出现的WHERE子句中的第二个条件实际上消失了。定义$wr_id后,查询基本上会减少第一个查询。