2012-01-21 36 views
0

說如果我有2個表。第一個擁有用戶ID和他們的名字。第二個保存用戶ID和他們的姓氏,但是根據用戶是否給出他們的姓氏,該表中的行可能存在也可能不存在。mysql(i):從多個表中選擇數據?

我想選擇名字和姓氏,但是如果只有名字存在,那麼就自己選擇。

我不能使用這樣的事情,因爲如果第二錶行不存在,它沒有返回值:

$db->query("select firstname.fname, lastname.lname from firstname, lastname where firstname.userid = lastname.userid"); 

感謝。

+2

現在是開始瞭解不同連接的時間....閱讀http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html。 ..這是一個非常好的解釋,應該把你放在正確的軌道 –

+0

沒有辦法做到這一點沒有加入? ; p –

+1

就其本質而言,執行一個從兩個表中檢索數據的查詢需要一個連接......並且真的值得了解不同的SQL連接,以及何時以及如何使用它們。 –

回答

2
SELECT f.fname, l.lname 
FROM firstname f 
    LEFT JOIN lastname l 
     ON f.userid = l.userid 

這將返回類似:

fname | lname 
John | Doe 
Bob | NULL 

其中NULL意味着,鮑勃還沒有得到最後的名字

JOIN比笛卡爾乘積更高性能的您正在使用您的示例中,因爲它不會產生所有可能的組合{firstame,lastname},但只是有意義的組合(具有相同用戶ID的組合)

+0

f是名字的別名當你在你的查詢中引用firstname時,你可以使用f,這只是爲了簡潔起見 – Dalen