我有两张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”时)
我不确定是否需要将其分为两个查询才能正常工作。希望有人能帮我解决这个问题。
2条答案
按热度按时间2guxujil1#
如果您不想在in列表中这样做,或者不想在最后一次登录时这样做,那么您将需要这样的内容
gfttwv5a2#
我认为你已经把事情复杂化了,一个简单的按id匹配应该会删除任何没有按id匹配的结果(与执行内部连接相同),对于其余的条件,你可以将它们添加到where子句中: