Oracle SQL:减号语句

时间:2018-10-27 00:06:48

标签: sql oracle

我正在数据库软件报告环境中运行此单个查询,并且运行良好。但是我希望能够接受此查询,并从table2.actionid更改为其他值的同一查询中减去它。

上下文:15和16对应于不同的用户操作ID。在这种情况下,16对应于创建文件,而15对应于删除文件。就我而言,为了找到正确的输出值,我需要用户操作16的此查询的输出减去用户操作15的相同查询的输出。
也请忽略“日期> =%1”,在我的环境中有一个单独的部分可以输入该日期。

以下是我的表格及其各自的列,以供快速参考:

Main Table (id)
Table 1 (defid, id, asubtype)
Table 2 (id, actionid, bsubtype, performerid)
Table 3 (userid)

这是我的个人查询:

SELECT decode(table1.defid,
2189, 'Category1',
3984, 'Category2',
5904, 'Category3',
6238, 'Category4',
6849, 'Category5',
'Unknown') "Category", table1.id "ID Number",
COUNT (table1.defid) as "Running Total"
FROM table1
INNER JOIN
maintable ON maintable.id = table1.id
INNER JOIN
table2 ON table2.id = maintable.id
INNER JOIN 
table3 ON table3.userid = table2.performerid
WHERE table2.actionid = 16
AND auditdate >= %1
AND table2.bsubtype = 0
AND table1.asubtype = -18
GROUP BY table1.defid, table1.id

当table2.actionid = 16时,我的“跑步总数”为2。 当table2.actionid = 15时,我的“运行总计”为1。

已创建两个文件,一个已删除。我的输出应该是已创建但未删除的所有文件。 因此,从逻辑上讲,减号语句的输出应为1?对吧?

但是,当我使用Oracle MINUS语句(https://www.techonthenet.com/oracle/minus.php)时,我的运行总计仍然是2。

我在做什么错?我应该改用某种子选择吗? 我喝咖啡因过多吗?我是否缺少简单的东西?任何意见/建议都将非常有帮助 :)

这是减号查询:

SELECT decode(table1.defid,
2189, 'Category1',
3984, 'Category2',
5904, 'Category3',
6238, 'Category4',
6849, 'Category5',
'Unknown') "Category", table1.id "ID Number",
COUNT (table1.defid) as "Running Total"
FROM table1
INNER JOIN
maintable ON maintable.id = table1.id
INNER JOIN
table2 ON table2.id = maintable.id
INNER JOIN
table3 ON table3.userid = table2.performerid
WHERE table2.actionid = 16
AND auditdate >= %1
AND table2.bsubtype = 0
AND table1.asubtype = -18
GROUP BY table1.defid, table1.id

MINUS

SELECT decode(table1.defid,
2189, 'Category1',
3984, 'Category2',
5904, 'Category3',
6238, 'Category4',
6849, 'Category5',
'Unknown') "Category", table1.id "ID Number",
COUNT (table1.defid) as "Running Total"
FROM table1
INNER JOIN
maintable ON maintable.id = table1.id
INNER JOIN
table2 ON table2.id = maintable.id
INNER JOIN
table3 ON table3.userid = table2.performerid
WHERE table2.actionid = 15
AND auditdate >= %1
AND table2.bsubtype = 0
AND table1.asubtype = -18
GROUP BY table1.defid, table1.id

1 个答案:

答案 0 :(得分:1)

不太确定您要达到什么结果,但是MINUS set 操作,即在第一个结果集中查找没有在第二个结果集中显示的记录。因此,如果您正在寻找其余的COUNT,则需要加入这些结果集,并对运行总计(而不是MINUS)进行减法