Sql 如何查询没有响应的请求记录

Sql 如何查询没有响应的请求记录,sql,oracle,oracle11g,oracle10g,Sql,Oracle,Oracle11g,Oracle10g,我有一个订单管理系统,里面有一张桌子。可能有一个请求,应该有响应。例如:- 共有两列,编号和类型如下:- A Request A Response B Request C Request D Request E Request E Response C Response 我想查询表中有请求但没有响应的唯一数字。例如,在上述情况B和D中,您可以选择所有请求,然后删除有响应的请求: SELECT t1.UniqueNumber FROM your_table t1 WHERE t1.Type =

我有一个订单管理系统,里面有一张桌子。可能有一个请求,应该有响应。例如:-

共有两列,编号和类型如下:-

A Request
A Response
B Request
C Request
D Request
E Request
E Response
C Response

我想查询表中有请求但没有响应的唯一数字。例如,在上述情况B和D中,您可以选择所有请求,然后删除有响应的请求:

SELECT t1.UniqueNumber
FROM your_table t1
WHERE t1.Type = 'Request'
  AND NOT EXISTS
  (
    SELECT 1
    FROM your_table t2
    WHERE t2.UniqueNumber = t1.UniqueNumber
    AND t2.Type = 'Response'
  )

使用
(Type,UniqueNumber)

上的复合索引可以提高性能。您可以选择所有请求并删除具有响应的请求:

SELECT t1.UniqueNumber
FROM your_table t1
WHERE t1.Type = 'Request'
  AND NOT EXISTS
  (
    SELECT 1
    FROM your_table t2
    WHERE t2.UniqueNumber = t1.UniqueNumber
    AND t2.Type = 'Response'
  )

(Type,UniqueNumber)

上使用复合索引可以提高性能使用左自联接,条件是过滤掉匹配项:

select t1.UniqueNumber
from mytable t1
left join mytable t2 on t2.UniqueNumber = t1.UniqueNumber
  and t2.type = 'Response'
where t1.type = 'Request'
and t2.type is null
此查询之所以有效,是因为连接条件试图通过在连接条件中放置类型测试来查找响应,而错过的连接将返回值的null,而where子句将查找这些值


只要UniqueNumber上有一个索引,由于联接的效率,此查询将比所有其他形式的查询执行得快。

使用左自联接,条件是过滤掉匹配项:

select t1.UniqueNumber
from mytable t1
left join mytable t2 on t2.UniqueNumber = t1.UniqueNumber
  and t2.type = 'Response'
where t1.type = 'Request'
and t2.type is null
SELECT UniqueNumber, Type FROM table
WHERE UniqueNumber IN
(SELECT  UniqueNumber, COUNT( UniqueNumber)
FROM table
GROUP BY UniqueNumber
HAVING COUNT( UniqueNumber)=1) 
此查询之所以有效,是因为连接条件试图通过在连接条件中放置类型测试来查找响应,而错过的连接将返回值的null,而where子句将查找这些值

只要UniqueNumber上有一个索引,由于连接的效率,这个查询将比所有其他形式的查询执行得快

SELECT UniqueNumber, Type FROM table
WHERE UniqueNumber IN
(SELECT  UniqueNumber, COUNT( UniqueNumber)
FROM table
GROUP BY UniqueNumber
HAVING COUNT( UniqueNumber)=1) 
。。。。。。顺便说一下

如果可以重复两次,则您的唯一编号不是唯一编号。我希望您有一个主键用于索引和性能目的,尽管UniqueNumber和Type的组合构成了唯一的串联主键

。。。。。。顺便说一下


如果可以重复两次,则您的唯一编号不是唯一的编号。我希望您有一个主键用于索引和性能目的,尽管UniqueNumber和Type的组合构成了一个唯一的串联主键。

您也可以尝试使用减号

  select t1.uniqueNumber
    from myTable t1
   where t1.type = 'Request'
  minus
  select t1.uniqueNumber
    from myTable t1
   where t1.type = 'Response'

这种方法通常很快,而且我认为很容易阅读。

您也可以尝试使用减号:

  select t1.uniqueNumber
    from myTable t1
   where t1.type = 'Request'
  minus
  select t1.uniqueNumber
    from myTable t1
   where t1.type = 'Response'

这种方式通常很快,而且在我看来很容易阅读。

谢谢。谢谢你的帮助,谢谢。谢谢你的帮助,谢谢。谢谢你的帮助。但当我计算“左连接”查询的计划时,它似乎比这个查询更有希望。虽然这个查询和我需要的一样,谢谢。谢谢你的帮助。但当我计算“左连接”查询的计划时,它似乎比这个查询更有希望。尽管这个查询与我所需要的相同。