MySQL从另一个表中的数据中选择数据

时间:2018-09-10 15:00:10

标签: mysql

我有两个mysql表

表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列。

我有一个特定的值列表,我想在table2中找到,但我也想包含只包含来自Table1的数据(状态为1且来自Table2的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”,即使在“ IN”列表中包含了特殊ID。

此外,结果也不应包含ID“ 4”,因为specialID未包含在“ IN”列表中,并且“ lastLoginDate”大于“ 2018-03-17”。

同样,有2个总体条件  1.必须在“ IN”列表中(仅当状态为“ 1”时)  2.需要位于lastLoginDate之内(如果出现在“ IN”列表中,该列表应覆盖此条件,但是仅当状态为“ 1”时)

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

2 个答案:

答案 0 :(得分:2)

如果您不希望在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')

答案 1 :(得分:-1)

我认为您的操作过于复杂,按ID进行简单匹配应删除没有按ID进行匹配的任何结果(与进行内部联接相同),对于其余条件,您可以将其添加到where子句:

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' ;