2010-06-24 170 views
0

我有兩個表是用戶之一:複雜SQL連接查詢

id  int(11)  NO PRI  NULL auto_increment 
membership_type  tinyint(3) unsigned  NO MUL  NULL  
username varchar(16)  NO  NULL  
password char(40) NO  NULL  
email varchar(100) NO  NULL  
firstname varchar(40)  NO  NULL  
lastname varchar(40)  NO  NULL  
company  varchar(120) NO  NULL  
birthday date NO  NULL  
country  smallint(5) unsigned NO  NULL  
city smallint(5)  NO  NULL  
address  varchar(200) NO  NULL  
landphone char(10) NO  NULL  
mobilephone  char(10) NO  NULL  
website  varchar(150) NO  NULL  
feedback_score tinyint(4) NO  NULL  
created  datetime NO  NULL  
last_login datetime NO  NULL  
last_ip  varchar(15)  NO  NULL  

另一名是user_cache:

user_id  int(11)  NO MUL  NULL  
cache_type int(50)  NO  NULL  
value varchar(100) NO  NULL  

我要選擇的用戶數據(會員,用戶名,名字,姓氏等),並選擇相關用戶的緩存數據(select * from user_cache,其中user_id = X)。我用簡單的sql查詢選擇用戶,然後我使用另一個sql查詢獲取緩存詳細信息。我想將查詢連接到一個查詢中。這可能嗎 ?

回答

5
select u.*, uc.* 
from users as u 
left join user_cache as uc 
    on u.id = uc.user_id 

你會得到所有的用戶信息user_cache的每一行數據,如果用戶沒有user_cache數據,那麼你會得到空的user_cache數據。

+0

確實這是我寫的也是,我看不出爲什麼這是複雜的,這是一個非常簡單的'JOIN'條件。 – Kezzer 2010-06-24 13:54:04

0

也許我沒有正確理解你的問題,但下面的查詢應返回你所需要的:

SELECT u.membership_type, u.firstname, ..., uc.* 
FROM users u 
LEFT JOIN user_cache uc 
ON u.id = uc.user_id; 
+0

這是一個內部連接;如果用戶在「USER_CACHE」表中沒有條目 - 它們將不在結果集中,這就是您要使用OUTER連接的原因。 – 2010-06-24 17:38:40

+0

你是對的。固定。 – ryanprayogo 2010-06-24 18:53:15

1

我想這可能會奏效?

SELECT u.*, uc.* 
FROM user u 
    left join user_cache uc ON uc.user_id = u.id