mysql - 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”时)
我不确定这是否需要分成两个查询才能正常工作。希望有人能帮我解决这个问题。
解决方案
如果您不想在 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')
推荐阅读
- android - 与模拟器不同,Android 应用程序 UI 无法在物理设备上正确显示
- javascript - 如何验证价格输入?
- python - (Django - Python)对views.py的隐藏输入请求
- azure-devops - Azure DevOps 推送到 GitLab
- c++ - Winpcap 程序与 MinGW 一起运行,但在 Qt 中不与 MSVC 2015 一起运行
- python - 删除值为空列表的字典的键
- google-cloud-platform - Google Workspace Marketplace SDK 意外从应用配置中移除 OAuth 范围
- c# - 如果我通过 PowerShell 创建 dotnet 控制台应用程序,则无法在 Visual Studio 2019 中进行调试
- java - Java LocalTime 对象不支持超过 24 小时的值
- typescript - mui TextField 标签宽度问题,当我进行字体覆盖时