【问题标题】:Complicated SQL Join Query复杂的 SQL 连接查询
【发布时间】:2023-03-08 19:51:01
【问题描述】:

我有两张表,其中一张是 users:

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 where user_id = X 中选择 *)。我使用简单的 sql 查询选择用户,然后我使用另一个 sql 查询来获取缓存详细信息。我想将查询合并到一个查询中。这可能吗?

【问题讨论】:

    标签: sql mysql


    【解决方案1】:
    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 数据的空值。

    【讨论】:

    • 确实这也是我写的,我不明白为什么这很复杂,这是一个非常直截了当的JOIN 条件。
    【解决方案2】:

    我想这可能有用吗?

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 这是一个内连接;如果用户在 USER_CACHE 表中没有条目 - 他们不会出现在结果集中,这就是您要使用 OUTER 连接的原因。
      猜你喜欢
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 2011-10-08
      • 2023-03-05
      相关资源
      最近更新 更多