2010-06-24 134 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