首页 > 解决方案 > 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”,因为 Table1 中的状态为“0”,即使 specialID 包含在“IN”列表中。

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

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

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

标签: mysql

解决方案


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

推荐阅读