首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询效率,3个子表到1个父表

查询效率,3个子表到1个父表
EN

Stack Overflow用户
提问于 2013-11-12 21:01:54
回答 2查看 106关注 0票数 2

我有一种感觉,有一个更好的方法来做这件事,但它并没有出现在脑海中,我猜我会觉得我会觉得像个白痴后,建议。关键是子查询中的完全外部联接。我有一个父表,它有三个使用相同外键的子表。如果其中一个子表具有数据,则其他两个子表不应该具有与同一个父id相关的数据。父表的每一行都有一个子表中的一行数据。

示例数据布局,

家长表:

代码语言:javascript
复制
TRANSACTION
ID
1
2
3
4
5
6

儿童桌:

代码语言:javascript
复制
TRANSACTION_CH_A    TRANSACTION_CH_B    TRANSACTION_CH_C
T_ID_FK             T_ID_FK             T_ID_FK
1                   null                null
2                   null                null
null                3                   null
null                4                   null
null                null                5
null                null                6

这是我想出的查询:

代码语言:javascript
复制
SELECT * FROM TRANSACTION T
JOIN 
(
  SELECT 
  COALESCE (CH_A.T_ID_FK, CH_B.T_ID_FK, CH_C.T_ID_FK) AS T_ID
  FROM IPAC_OWN.TRANSACTION_CH_A CH_A
  FULL OUTER JOIN IPAC_OWN.TRANSACTION_CH_B CH_B ON CH_B.T_ID_FK = CH_A.T_ID_FK
  FULL OUTER JOIN IPAC_OWN.TRANSACTION_CH_C CH_C ON CH_C.T_ID_FK = CH_A.T_ID_FK
) 
CHILDREN ON CHILDREN.T_ID = T.ID

结果应该包含子表中的每一行。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-12 21:08:23

你可以做一些很简单的事情,比如联盟

代码语言:javascript
复制
SELECT T_ID_FK  FROM  TRANSACTION_CH_A WHERE T_ID_FK  IS NOT NULL
UNION ALL 
SELECT  T_ID_FK   FROM TRANSACTION_CH_B WHERE T_ID_FK  IS NOT NULL
UNION ALL 
SELECT   T_ID_FK  FROM TRANSACTION_CH_C WHERE T_ID_FK  IS NOT NULL

如果希望结果集中为空,只需从每个select语句中取出where子句即可。

票数 0
EN

Stack Overflow用户

发布于 2013-11-12 21:08:14

这个怎么样?

代码语言:javascript
复制
select
    *
from
    transaction t
    join IPAC_OWN.TRANSACTION_CH_A CH_A ON CH_A.T_ID_FK = T.ID
union
select
    *
from
    transaction t
    join IPAC_OWN.TRANSACTION_CH_B CH_B ON CH_B.T_ID_FK = T.ID
union
select
    *
from
    transaction t
    join IPAC_OWN.TRANSACTION_CH_C CH_C ON CH_C.T_ID_FK = T.ID
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19939818

复制
相关文章

相似问题

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