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
uj5u.com熱心網友回復:
來大神啊,來大神uj5u.com熱心網友回復:
來人啊,求討論uj5u.com熱心網友回復:
select c1.*,c2.*from ss,c1,c2
where ss.id = c1.ss_id
or ss.id = c2.ss_id
這個意思?
uj5u.com熱心網友回復:
第一種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 ,想找找有沒有更優化的方式
uj5u.com熱心網友回復:
第一種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
望指正,三張表都是大資料下,求最優查詢
uj5u.com熱心網友回復:
使用union,推薦: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,采用你的第二種
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/83875.html
標籤:高級技術
