【问题标题】:Join two Oracle queries加入两个 Oracle 查询
【发布时间】:2010-06-09 08:49:46
【问题描述】:

我必须从两个表中查询并想要一个结果.. 我怎样才能加入这两个查询?

第一个查询是从两个表中查询,而第二个查询只从一个表中查询。

select pt.id,pt.promorow,pt.promocolumn,pt.type,pt.image,pt.style,pt.quota_allowed,ptc.text,pq.quota_left 

from promotables pt,promogroups pg ,promotablecontents ptc ,promoquotas pq where pt.id_promogroup = 1 and ptc.country ='049' and ptc.id_promotable = pt.id and pt.id_promogroup = pg.id and pq.id_promotable = pt.id order by pt.promorow,pt.promocolumn

select  pt.id,pt.promorow,pt.promocolumn,pt.type,pt.image,pt.style,pt.quota_allowed from promotables pt where pt.type='heading'

【问题讨论】:

  • 你想加入查询还是连接它们?这些在 SQL 中意味着不同的东西。连接通常意味着连接条件(select from a join b on a.col = b.col),而连接只是将一个查询的结果附加到另一个(例如通过UNIONUNION ALL)。

标签: oracle join


【解决方案1】:

使用 UNION 或 UNION ALL。只要您有相同数量的列,并且它们是兼容的类型,就可以满足您的需求。

SELECT pt.id, pt.promorow, pt.promocolumn, pt.type, pt.image, pt.style, pt.quota_allowed, ptc.text, pq.quota_left 
FROM promotables pt, promogroups pg, promotablecontents ptc, promoquotas pq 
WHERE pt.id_promogroup = 1
AND ptc.country ='049' 
AND ptc.id_promotable = pt.id
AND pt.id_promogroup = pg.id
AND pq.id_promotable = pt.id 
UNION
SELECT pt.id, pt.promorow, pt.promocolumn, pt.type, pt.image, pt.style, pt.quota_allowed, NULL, NULL
FROM promotables pt 
WHERE pt.type='heading'
ORDER BY 2, 3

如果要显示重复项(例如来自两个查询的相同行),请使用 UNION ALL

【讨论】:

  • 只需为其他查询中的列选择 NULL。这意味着您仍将获得该列,并且查询 1 的结果可能在那里有数据,而查询 2 中的行将始终包含这些列的 NULL。
猜你喜欢
  • 2014-05-03
  • 1970-01-01
  • 2010-10-08
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 2014-02-13
  • 1970-01-01
相关资源
最近更新 更多