【问题标题】:Get data from tables without foreign key从没有外键的表中获取数据
【发布时间】:2015-04-11 15:09:47
【问题描述】:

我需要查询帮助以从 3 个表中获取数据,如下所示。

表 T1 - 以 tID 作为主键 表 T2 - TID 是此表中的外键 表 T3 - rname 等于 t2 中的 rname 但这两个表不相关。

我尝试过使用内部联接,但它没有给出所需的结果(在所有行中显示相同的 SREF 值)并且交叉联接生成一个产品。

请您帮忙,以便我获得所需输出部分中给出的输出。

谢谢

加根

创建表 t1 (tID, ts, Val) 作为选择
1, to_date('2/2/2015 12:05', 'MM/DD/YYYY HH24:MI'), 1 from dual union all select
2, to_date('2/2/2015 12:05', 'MM/DD/YYYY HH24:MI'), 2 from dual union all select
3, to_date('2/2/2015 12:05', 'MM/DD/YYYY HH24:MI'), 2 from dual union all select
1, to_date('2/2/2015 12:10', 'MM/DD/YYYY HH24:MI'), 1 from dual union all select
2, to_date('2/2/2015 12:10', 'MM/DD/YYYY HH24:MI'), 2 from dual union all select
3, to_date('2/2/2015 12:10', 'MM/DD/YYYY HH24:MI'), 2 from dual union all select
1, to_date('2/2/2015 12:15', 'MM/DD/YYYY HH24:MI'), null from dual union all select
2, to_date('2/2/2015 12:15', 'MM/DD/YYYY HH24:MI'), 3 from dual union all select
3, to_date('2/2/2015 12:15', 'MM/DD/YYYY HH24:MI'), 2 from dual union all select
1, to_date('2/2/2015 12:20', 'MM/DD/YYYY HH24:MI'), null from dual union all select
2, to_date('2/2/2015 12:20', 'MM/DD/YYYY HH24:MI'), 1 from dual union all select
3, to_date('2/2/2015 12:20', 'MM/DD/YYYY HH24:MI'), 3 from dual union all select
1, to_date('2/2/2015 12:25', 'MM/DD/YYYY HH24:MI'), null from dual union all select
2, to_date('2/2/2015 12:25', 'MM/DD/YYYY HH24:MI'), 10 from dual union all select
3, to_date('2/2/2015 12:25', 'MM/DD/YYYY HH24:MI'), 9 from dual union all select
1, to_date('2/2/2015 12:30', 'MM/DD/YYYY HH24:MI'), 1 from dual union all select
2, to_date('2/2/2015 12:30', 'MM/DD/YYYY HH24:MI'), 2 from dual union all select
3, to_date('2/2/2015 12:30', 'MM/DD/YYYY HH24:MI'), 1 from dual union all select
1, to_date('2/2/2015 12:35', 'MM/DD/YYYY HH24:MI'), null from dual union all select
2, to_date('2/2/2015 12:35', 'MM/DD/YYYY HH24:MI'), 2 from dual union all select
3, to_date('2/2/2015 12:35', 'MM/DD/YYYY HH24:MI'), 1 from dual union all select
1, to_date('2/2/2015 12:40', 'MM/DD/YYYY HH24:MI'), null from dual union all select
2, to_date('2/2/2015 12:40', 'MM/DD/YYYY HH24:MI'), 2 from dual union all select
3, to_date('2/2/2015 12:40', 'MM/DD/YYYY HH24:MI'), 2 来自双;

创建表 t2 (tID, sname, rname) 作为选择
1、SN1、RN1 from dual union all select
2、SN2、RN2 from dual union all select
3、SN3、RN3 from dual union all select
4、SN4、RN4 from dual union all select
5、SN5、RN5从双联全选
6、SN6、RN6 from dual union all select
7、SN7、RN7从双联全选
8、SN8、RN8从双联全选
9、SN9、RN9 from dual union all select
10、SN10、RN10自双;

创建表 t3 (rid, rname, sref) 作为选择
R1、RN1、SREF1 来自双联合全部选择
R2、RN2、SREF2 来自双联合全部选择
R3、RN3、SREF3 来自双联合全选
R4、RN4、SREF4 来自双联合全选
R5、RN5、SREF5 来自双联全选
R6、RN6、SREF6 来自双联合全选
R7、RN7、SREF7 来自双联合全选
R8、RN8、SREF8 来自双联全选
R9、RN9、SREF9 来自双联全选
R10、RN10、SREF10 来自双路;

想要的输出

TID、SNAME、RNAME、SREF1
1、SN1、RN1、SREF1
2、SN2、RN2、SREF2
3、SN3、RN3、SREF3

【问题讨论】:

  • 请展示你的加入尝试——这正是你应该做的,你很可能错过了一些东西。
  • 这是我写的查询 SELECT T1."TID" AS TID, T2."SNAME" AS SNAME, T2."RNAME" AS RNAME,T3."SREF" AS SREF FROM "SDB"。 "T1" T1 INNER JOIN "SDB"."T2" T2 ON T1."T_ID" = T2."TID" INNER JOIN "SDB"."T3" T3 ON T2."RNAME" = T3."RNAME"跨度>
  • 请将其编辑到您的问题中。

标签: join inner-join cross-join


【解决方案1】:

您写道:“表 T1 - 以 tID 作为主键 表 T2 - TID 是此表中的外键”,但在示例中情况正好相反。

您写道:“表 T3 - sname 等于 t2 中的 sname,但这两个表不相关。”,但 T3 中没有 sname

您是否尝试过: select t1.TID, t2.SNAME, t2.RNAME, t3.SREF from t1,t2,t3 where t1.tid=t2.tid and t2.rname=t3.rname

【讨论】:

  • 对不起,我的坏 T2 和 T3 有共同的 rname。我尝试了您提供的查询,但它针对所有行给出了相同的 sref 值
  • 我提供的选择给出了这个结果(Oracle):TID,SNAME,RNAME,SREF 1,SN1,RN1,SREF1 2,SN2,RN2,SREF2 3,SN3,RN3,SREF3 1,SN1,RN1,SREF1 2,SN2,RN2,SREF2 3,SN3,RN3,SREF3 1,SN1,RN1,SREF1 2,SN2,RN2,SREF2 3,SN3,RN3,SREF3 1,SN1,RN1,SREF1 2,SN2,RN2,SREF2 3,SN3,RN3,SREF3 1,SN1,RN1,SREF1 2,SN2,RN2,SREF2 3,SN3,RN3,SREF3 1,SN1,RN1,SREF1 2,SN2,RN2,SREF2 3,SN3,RN3,SREF3 1,SN1,RN1,SREF1 2,SN2,RN2,SREF2 3,SN3,RN3,SREF3 1,SN1,RN1,SREF1 2,SN2,RN2,SREF2 3,SN3,RN3,SREF3
猜你喜欢
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 2020-01-27
  • 2011-12-31
相关资源
最近更新 更多