代码之家  ›  专栏  ›  技术社区  ›  Austin

mysql基于另一个表中的数据从一个表中选择数据

  •  0
  • Austin  · 技术社区  · 6 年前

    我有两张桌子

    表1:

    ID    data    status
    1     data1   1
    2     data2   1
    3     data3   0
    4     data4   1
    

    表2:

    ID    lastLoginDate    specialID
    1     2018-09-10       abc
    2     2018-03-16       xyz
    3     2018-02-20       foo
    4     2018-06-18       bar
    

    两个表之间的公共数据是ID列。

    我想在表2中找到一个特定值的列表,但我还想包括只包含表1中状态为1且表2中的lastLoginDate小于“2018-03-17”的数据的结果

    以下是我迄今为止尝试使用的代码,但它不起作用:

    SELECT Table1.data, Table2.ID, Table2.specialID 
    FROM Table1, Table2 
    WHERE Table2.SpecialID IN ('acb, foo') OR Table2.ID IN 
      (SELECT Table2.ID 
      FROM Table1, Table2 
      WHERE Table1.ID = Table2.ID 
        AND Table1.status = '1' 
        AND Table2.lastLoginDate < '2018-03-17'
      )";
    

    预期结果:

    data    ID    specialID
    data1   1     abc
    data2   2     xyz
    

    结果不应包括ID“3”,因为表1中的状态为“0”,即使specialID包含在“in”列表中。

    同样,有两个总体条件 2需要在lastLoginDate中(如果在“IN”列表中显示,则应覆盖此条件,但仅当状态为“1”时)

    我不确定是否需要将其分为两个查询才能正常工作。希望有人能帮我解决这个问题。

    2 回复  |  直到 6 年前
        1
  •  2
  •   saihtam8    6 年前

    如果您不想在in列表中这样做,或者不想在最后一次登录时这样做,那么您将需要这样的内容

    select t1.data, t2.id, t2.specialID
    from table1 t1
    inner join table2 t2
        on t1.id = t2.id 
    where t1.status = 1
        and (t2.specialID in('abc','foo') or t2.lastloginDate <'2018-03-17')
    
        2
  •  -1
  •   Juan    6 年前

    Select t1.data, t1.id, t2.specialID
    from Table1 as T1, Table2 as T2
    where t1.id = t2.id
    and t1.status = 1
    and t2.specialId in ('abc','foo')
    and t2.login_date < '2018-03-17' ;