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

jhiyze9q  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(336)

我有两张table
表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”列表中。
此外,结果不应包含id“4”,因为specialid未包含在“in”列表中,并且“lastlogindate”大于“2018-03-17”。
同样,有2个总体条件1。需要在“in”列表中(仅当状态为“1”)2。需要在lastlogindate中(如果在“in”列表中显示,则应覆盖此条件,但仅当状态为“1”时)
我不确定是否需要将其分为两个查询才能正常工作。希望有人能帮我解决这个问题。

2guxujil

2guxujil1#

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

gfttwv5a2#

我认为你已经把事情复杂化了,一个简单的按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' ;

相关问题