【问题标题】:Select 1 record from first table if condition is true in second table (all refeance rows active = 0)如果第二个表中的条件为真,则从第一个表中选择 1 条记录(所有引用行活动 = 0)
【发布时间】:2014-11-30 00:54:07
【问题描述】:

我有两张桌子。 如果我想从第一个表中选择 1 条记录 第二个表中的条件为真(活动 = 0)

表领导:

    -------------
    | id | name |
    -------------
    | 1  | abc1 |
    | 2  | abc2 |
    | 3  | abc3 |
    | 4  | abc4 |
    | 5  | abc5 |
    -------------

表LeadsDetails:

    -------------------------
    | id | lead_id | active |
    -------------------------
    | 1  | 1       | 1       |
    | 2  | 1       | 0       |
    | 3  | 2       | 0       |
    | 4  | 3       | 1       |
    | 5  | 4       | 0       |
    | 6  | 5       | 0       |
    | 7  | 5       | 0       |
    --------------------------

预期输出:

    --------------
    | id | name   |
    --------------
    | 2  | abc2   |
    | 4  | abc4   |
    | 5  | abc5   |
    --------------

SELECT `Lead`.`id`, `Lead`.`name`, `Lead`.`unsubscribe` 
FROM `leads` AS `Lead` inner JOIN `LeadsDetails` AS `LeadsDetails` 
ON (`LeadsDetails`.`lead_id` = `Lead`.`id`) 
WHERE `LeadsDetails`.`active` = 0

【问题讨论】:

    标签: mysql sql join phpmyadmin inner-join


    【解决方案1】:

    我认为你可以用exists 子句做你想做的事:

    select l.*
    from Lead l
    where exists (select 1 from LeadsDetails ld where ld.lead_id = l.id and ld.active = 0)
    

    【讨论】:

      【解决方案2】:

      因为只有在活动列没有 1 时才需要获取记录 使用NOT EXISTS

      SQL FIDDLE 演示:http://www.sqlfiddle.com/#!2/00970/1

      SELECT * FROM
      Lead L
      WHERE NOT EXISTS (
        SELECT 1 FROM LeasdDetails LD
        where L.id = LD.lead_id
        AND LD.active =1
      )
      

      【讨论】:

        【解决方案3】:

        这应该比不存在运行得更快,因为子查询不会对每一行都运行;在这种情况下,我正在计算给定 ID 表中的活动字段值不为 0 的情况的数量,并且仅显示该计数为 0 的行(即,对于给定的 ID,活动字段始终为 0 )

        select l.id, l.name
          from lead l
          join leadsdetails ld
            on l.id = ld.lead_id
         group by l.id, l.name
        having sum(case when ld.active <> 0 then 1 else 0 end) = 0
        

        小提琴: http://www.sqlfiddle.com/#!2/00970/2/0

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-07-23
          • 1970-01-01
          • 1970-01-01
          • 2021-12-12
          • 2023-04-10
          • 2023-03-15
          • 2021-01-28
          相关资源
          最近更新 更多