q:一个表中的一个字段在另外两个表(结构一样)中关联,怎样一次性将两表数据都查出来
例:
create table ss (id int ,name varchar(22));
create table c1( id int ,name VARCHAR(22),ss_id int);
create table c2( id int ,name VARCHAR(22),ss_id int);
表ss的id和表c1或c2中ss_id关联,表c1和c2结构一致
期望:查询出ss表id在c1和c2中存在的所有字段信息 ,不使用union
例:
create table ss (id int ,name varchar(22));
create table c1( id int ,name VARCHAR(22),ss_id int);
create table c2( id int ,name VARCHAR(22),ss_id int);
表ss的id和表c1或c2中ss_id关联,表c1和c2结构一致
期望:查询出ss表id在c1和c2中存在的所有字段信息 ,不使用union
解决方案 »
- 查找每个列最长数据的长度
- oracle问题
- form6i和developer2000支持oracle8,oracle8i,oracle9i吗?
- 如何同步oracle9i的数据库与powerdesign中的物理模型?
- VNI-2015 : 目标节点的节点首选身份证明无效
- 送分!帮个忙,我要在oracle里建个表,book(id,name,price),但是要id是自动增长!
- 好急的问题啊!!!!!!!!在线等待
- 说说分布式数据库:如腾训的网站应该是分布在各地都有吧。那怎么实现访问控制的呢。
- oracle创建物化视图一直执行
- oracle 查询
- Oracle日志中alert_orcl.log出现Fatal NI connect error 12170,如何破?
- Oracle如何跨服务器实时生成视图
from ss,c1,c2
where ss.id = c1.ss_id
or ss.id = c2.ss_id
这个意思?
select * from ss INNER JOIN c1 on ss.id=c1.ss_id
union all
select * from ss INNER JOIN c2 on ss.id=c2.ss_id
第二种
select ss.*,c1.* from ss,c1 where
EXISTS (select SS.id from c1 where ss.id=c1.ss_id )
or
EXISTS (select SS.id from c2 where ss.id=c2.ss_id )
这个意思 这表ss有100W数据,c1和c2加起来分这100W ,想找找有没有更优化的方式
select * from ss INNER JOIN c1 on ss.id=c1.ss_id
union all
select * from ss INNER JOIN c2 on ss.id=c2.ss_id
第二种
select ss.*,c1.* from ss,c1 where
EXISTS (select SS.id from c1 where ss.id=c1.ss_id )
or
EXISTS (select SS.id from c2 where ss.id=c2.ss_id )
第三种
select * from ss INNER JOIN (
select c1.* from c1
union all
select c2.* from c2 ) tmp
on ss.id=tmp.id
第四种
select * from ss LEFT JOIN c1 on ss.id=c1.ss_id LEFT JOIN c2 on ss.id=c2.ss_id
where c1.ss_id is not null or c2.ss_id is not null
第5种
select SS.*,ifnull(c1.id,c2.id) c_id ,ifnull(c1.name,c2.name) c_name,ifnull(c1.ss_id,c2.ss_id) c_ssid from
ss LEFT JOIN c1 on ss.id=c1.ss_id LEFT JOIN c2 on ss.id=c2.ss_id
where c1.ss_id is not null or c2.ss_id is not null
望指正,三张表都是大数据下,求最优查询
select c1.* from c1
where exists (select 1 from ss where c1.ss_id=ss.id)
union all
select c2.* from c2
where exists (select 1 from ss where c2.ss_id=ss.id)不使用union,采用你的第二种