复杂的SQL连接查询

时间:2010-06-24 13:49:43

标签: sql mysql

我有两个表用户:

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     

我想选择用户数据(成员资格,用户名,名字,姓氏等)并选择相关用户的缓存数据(从user_cache中选择*,其中user_id = X)。我选择简单的SQL查询用户然后我使用另一个SQL查询获取缓存详细信息。我想将查询加入一个查询。这可能吗?

3 个答案:

答案 0 :(得分: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数据的空值。

答案 1 :(得分:1)

我想这可行吗?

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

答案 2 :(得分:0)

也许我没有正确理解你的问题,但以下查询应该返回你需要的内容:

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