首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何检索SQL中嵌套表的列

如何检索SQL中嵌套表的列
EN

Stack Overflow用户
提问于 2022-09-02 11:11:35
回答 2查看 47关注 0票数 0

这可能是一个基本问题,但是如何在使用NOT in函数时从内表中检索第2列?

例如,我有两个表Customer(Customer id,customername) Orders (订单id,Order date,customerid),这里的customer id是格式化的外键。

我正在写一个查询

代码语言:javascript
代码运行次数:0
运行
复制
select * 
from customer
where customerid not in (select case when '1' then substr(customerid,1,2)
                                     when '2' then substr(customerid , 1,3)
                                     else customerid 
                                     end  from Orders)

在此查询中,如何检索订单id和订单日期?

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2022-09-02 19:27:42

试一试:

代码语言:javascript
代码运行次数:0
运行
复制
select customer.*, orders.orderid, orders.orderdate 
from customer 
full outer join 
(
  select case when substr(customerid,1,2) = '1' then substr(customerid,1,2)
              when substr(customerid,1,3) = '2' then substr(customerid,1,3)
              else customerid 
         end as customid
         , orderid, orderdate
  from Orders
) orders on (customer.customerid = orders.customid)
where customer.customerid is null
;

示例:

代码语言:javascript
代码运行次数:0
运行
复制
with customer as (
  select 'James' as name, '100' as customerid from dual 
  union all 
  select 'Mike' as name, '101' as customerid from dual 
  union all 
  select 'Steve' as name, '102' as customerid from dual 
  union all 
  select 'Nora' as name, '103' as customerid from dual 
),
orders as (
  select 1001 as orderid, TO_DATE('2020-06-01T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS') as orderdate, '100' as customerid from dual 
  union all 
  select 1002 as orderid, TO_DATE('2020-07-21T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS') as orderdate, '102' as customerid from dual 
  union all 
  select 1003 as orderid, TO_DATE('2020-07-22T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS') as orderdate, '2' as customerid from dual 
  union all 
  select 1004 as orderid, TO_DATE('2020-06-05T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS') as orderdate, '103' as customerid from dual 
  union all 
  select 1005 as orderid, TO_DATE('2020-06-05T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS') as orderdate, '101' as customerid from dual 
)
select customer.*, orders.orderid, orders.orderdate 
from customer 
full outer join 
(
  select case when substr(customerid,1,2) = '1' then substr(customerid,1,2)
              when substr(customerid,1,3) = '2' then substr(customerid,1,3)
              else customerid 
         end as customid
         , orderid, orderdate
  from Orders
) orders on (customer.customerid = orders.customid)
where customer.customerid is null
;

对我来说不太清楚的是你的客户身份格式化的外键。你能举几个例子吗?

票数 0
EN

Stack Overflow用户

发布于 2022-09-02 11:17:46

试试这个:

代码语言:javascript
代码运行次数:0
运行
复制
select c.customerid, c.customername, o.id, o.date 
  from orders o, customer c 
 where not exists (select 1 
                     from orders o2 
                    where c.customerid = o2.customerid 
                      and o.id = o2.id);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73581666

复制
相关文章

相似问题

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