2016-09-03 31 views
1

我有三個表,t_group,t_group_linkman,t_linkman。 T_group可以根據t_group表中的parent_id字段擁有其父組,並且t_linkman根據t_group_linkman表中的group_id字段擁有其父組。現在,我想選擇所有組和linkman。因此我編寫了sql,但是我發現我有兩次搜索該組。可以有人提出一些建議來更改我的sql語句嗎?如何在Oracle中使用結果時不僅一次存儲sql結果?

(select ''||id as id,parent_id as p_Id,name,null mobileNum1 from t_group) 
UNION 
(select tgl.group_id|'_'||l.id as id,tgl.group_id as 
p_Id,l.name,l.mobile_Num1 from t_linkman l 
inner join t_group_linkman tgl on tgl.LINKMAN_ID=l.id 
where tgl.GROUP_ID in(select id from t_group 
) and l.STATUS='Y') 

現在在我的sql語句中,我有兩次搜索t_group。

例如,測試數據:

t_group表:

id |parent_id|name 
---|---------|------- 
1 |0  |group1 
2 |0  |group2 
3 |2  |group3 

t_linkman表:

id|name  |mobileNum1 
--|---------|----------- 
1 |linkman1 |15624157851  
2 |linkman2 |15624157852    
3 |linkman3 |15624157853 

t_group_linkman表:

id|group_id | linkman_id 
--|---------|----------- 
1 |1  |1  
2 |2  |2    
3 |3  |3      
4 |2  |3 

而且我想返回結果LT(所有組和所有聯繫人):

id |parent_id|name  |mobileNum1 
----|---------|----------|----- 
1 |0  |group1 |null 
2 |0  |group2 |null 
3 |2  |group3 |null 
1_1 |1  |linkman1 |15624157851  
2_2 |2  |linkman2 |15624157852  
3_3 |3  |linkman3 |15624157853  
2_4 |2  |linkman4 |15624157853  

回答

1

可能是你正在尋找左連接

select tg.id as tg_id, tg.parent_id as p_Id, tg.name, l.mobileNum1 
from t_group tg 
LEFT JOIN t_group_linkman tgl on tgl.group_id = tg.id 
LEFT JOIN t_linkman l on tgl.LINKMAN_ID=L.id 
WHERE l.STATUS='Y' 

假設t_group和t_group_linkman有1:1間的關係,而t_group_linkman和t_linkman具有1:M

如果t_group和t_group_linkman也有1:M然後切換,首先加入到左連接以及

如果你給一些數據的例子,我可以定製查詢您的需求

更新1: 看起來這是你一直在尋找的查詢:

select to_char(tg.id), tg.parent_id, tg.name, l.mobileNum1 
    from t_group tg 
    inner join t_group_linkman tgl on tg.id=tgl.group_id 
    left join t_linkman l on tgl.linkman_id=l.id 
UNION ALL 
select to_char(tgl.group_id) || '_' || to_char(tgl.id), tgl.group_id, l.name, l.mobileNum1 
    from t_group_linkman tgl 
    left join t_linkman l on tgl.linkman_id=l.id 
+0

可能他們是瑪:M.One聯繫人可以在多個group.And一組能有多個聯繫人。 – Sarly

+0

[SQL]作爲tg_id選擇tg.id,tg.parent_id如P_ID,tg.name,l.mobileNum1 從(t_group TG INNER JOIN t_group_linkman TGL上tgl.group_id = tg.id)作爲join1 LEFT JOIN t_linkman升在tgl.LINKMAN_ID = join1.id [錯誤] ORA-00933:SQL命令未正確結束 – Sarly

+0

好的,給我幾分鐘來解決這個問題。錯過了一個重要部分 –