我有一个类似这样的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
答案 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
后,查询基本上会减少第一个查询。