首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sql数据检索问题

Sql数据检索问题
EN

Stack Overflow用户
提问于 2012-10-26 19:38:39
回答 3查看 49关注 0票数 0

我有以下几张表:

代码语言:javascript
复制
Order_id     orde_number    Order_name  

1             12345          iphone

2             67891          samsung 

order_event

代码语言:javascript
复制
order_event_no      status

1                    D

1                    C

2                    C

我编写了下面的查询来像下面这样检索status not in ('D'),但是它给了我两个记录,但是查询不应该返回,因为order_no 1已经作为状态D返回,即使它有第二个记录C,它不应该包含。

代码语言:javascript
复制
select o.order_number,o.order_name 
  from order o 
  join order_event oe 
    on (o.order_id=oe.order_event_no) where oe.status not in ('D') 

你好,柴土

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-26 19:43:37

这将满足您对给定模式/数据的要求.

代码语言:javascript
复制
SELECT order_number, order_name
FROM order
WHERE order_id NOT IN (SELECT order_event_no FROM order_event WHERE status = 'D')
票数 1
EN

Stack Overflow用户

发布于 2012-10-26 19:44:59

如果要排除任何具有“D”状态的订单,则需要一个子查询。

代码语言:javascript
复制
select o.order_number,o.order_name 
from order o 
where oe.order_event_no 
NOT IN
    (SELECT order_event_no FROM order_event_no WHERE status = 'D')
票数 0
EN

Stack Overflow用户

发布于 2012-10-26 19:52:44

这是等价的。一些RDBMs会更快地执行它:

代码语言:javascript
复制
Select
  o.order_number,
  o.order_name
from
  order o
where
  not exists (
    select
      'x'
    from
      order_event oe
    where
      oe.order_event_no = o.order_id And
      oe.status = 'D'
  );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13093323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档