2010-05-25 49 views
1

表1有u_name,表2具有u_name,u_type和u_adminMySQL的加入問題

  1. Table1.u_name是獨一無二的。但Table2中的3個字段都不是唯一的。

  2. 對於Table1.u_name的任何值,表2中都有0到多個Table2.u_name等於該值的條目。

  3. 對於Table1.u_name的任何值,有表2中0至1條目Table2.u_name等於該值並Table2.u_type = 'S'

我想要什麼:使用Table1.u_name來獲取Table1。 ,Table2.u_admin其中Table1.u_name = Tabl2.u_name和Table2.u_type ='S'。如果表2中沒有這樣的條目,我們仍然需要得到Table1。

請幫助給我一些提示。非常感謝!

回答

0

我建議你閱讀關於「外連接」,特別是「左外連接」,這是你想要的。外部聯接返回一個表中的所有行,並返回空值以顯示連接表中沒有與鍵匹配的行的值。

無論這些應該工作

select table1.*, table2.u_admin from table1 left join table2 
on table1.u_name=table2.u_name and table2.type='S' 

或者

with a as (select u_name,u_admin from table2 where type='S') 
select table1.*,a.u_admin from table1 left join a on table1.u_name=a.u_name 
+0

我以爲左的連接==左外連接。你是對的。非常感謝! – lonelyloner 2010-05-25 19:05:47

+0

它的確如此。解決問題的關鍵是首先將type ='S'放入連接或過濾器表格2中(概念上),這樣就不會刪除您真正想要的行。 – 2010-05-25 19:10:57

+0

我確實在where子句中放了table2.type ='S'。這是重點。再次感謝你! – lonelyloner 2010-05-25 19:17:02