【问题标题】:conditional join tables in mysqlmysql中的条件连接表
【发布时间】:2019-05-06 09:26:29
【问题描述】:

我有两张桌子。我想要这些表中允许和不允许 guest_id 1 的所有活动的列表。

第一个表

activity_name_id | activity_name |

    1                 Entry

    2                 Exit

    3                 Break

第二张桌子

allowed_guest_id | allowed_activity_name_id |
    1                 1
    2                 1
    1                 3
    2                 4

现在我想要结果

activity_name_id | activity_name |allowed_guest_id | allowed_activity_name_id |

    1                 Entry                1                 1

    2                 Exit                 null              2

    3                 Break                1                 3

我已经试过了。但它只返回两行。第一个和最后一个。

select * from table_activity_name
    left join table_allowed_activity 
    on activity_name_id = allowed_activity_name_id
        where allowed_activity_guest_id = 1;

【问题讨论】:

    标签: mysql join left-join


    【解决方案1】:

    如果要将条件应用于左连接表列,则必须在相关左连接表的 ON 子句中设置此条件

    select * 
    from table_activity_name
    left join table_allowed_activity 
        on activity_name_id = allowed_activity_name_id 
            AND  allowed__guest_id = 1;
    

    如果你对这些条件使用 where 查询作为内部连接工作

    【讨论】:

      【解决方案2】:

      试试这个

      select ta.activity_name_id, ta.activity_name, tal.allowed_guest_id, tal.allowed_activity_name_id from table_activity_name as ta
      left join table_allowed_activity  as tal
      on ta.activity_name_id = tal.allowed_activity_name_id
      and tal.allowed_activity_guest_id = 1;
      

      或IN操作

      select ta.activity_name_id, ta.activity_name, tal.allowed_guest_id, tal.allowed_activity_name_id from table_activity_name as ta
      left join table_allowed_activity  as tal
      on ta.activity_name_id = tal.allowed_activity_name_id
      and tal.allowed_activity_guest_id in (1,2);
      

      【讨论】:

        【解决方案3】:

        将您的allowed_activity_guest_id = 1 条件放入ON clause 而不是where

        select * from table_activity_name
            left join table_allowed_activity 
            on activity_name_id = allowed_activity_name_id
                and allowed_activity_guest_id = 1
        

        【讨论】:

          猜你喜欢
          • 2011-04-29
          • 2010-11-18
          • 1970-01-01
          • 2020-06-06
          • 2013-07-31
          • 1970-01-01
          • 2015-10-28
          • 2017-02-15
          相关资源
          最近更新 更多