Mysql 查找两个select查询的交集
我需要在MYSQL中找到以下查询之间的交集Mysql 查找两个select查询的交集,mysql,sql,Mysql,Sql,我需要在MYSQL中找到以下查询之间的交集 SELECT * FROM project.backup_table where project.backup_table.date <= (SELECT date FROM project.main_inout_table ORDER BY date desc LIMIT 1) and project.backup_table.date >= (SELECT date FROM project.main_inout_tab
SELECT *
FROM project.backup_table
where project.backup_table.date <= (SELECT date FROM project.main_inout_table ORDER BY date desc LIMIT 1)
and project.backup_table.date >= (SELECT date FROM project.main_inout_table ORDER BY date asc LIMIT 1)
SELECT *
FROM project.backup_table
WHERE concat(empid,date) not IN (SELECT concat(empid,date) FROM project.main_inout_table
各表如下:
我的回答是:
问题:tid 4的详细信息存在,是否应该通过第二次选择查询过滤掉 交点将是满足这两个条件的行。所以,只要把这些条件结合起来:
SELECT bt.*
FROM project.backup_table bt
WHERE bt.date <= (SELECT MAX(date) FROM project.main_inout_table mit) AND
bt.date >= (SELECT MIN(date) FROM project.main_inout_table mit) AND
NOT EXISTS (SELECT 1
FROM project.main_inout_table mit
WHERE mit.empid = bt.empid AND mit.date = bt.date
);
请注意以下更改:
这些表都有别名,它们是表名的缩写。
所有列都使用表别名限定。
前两个子查询只使用MIN和MAX。它们可以组合成一个子查询或join,但这遵循您最初的公式。
最后一个子查询使用EXISTS而不是CONCAT。实际上,这也可以用于元组,MySQL支持元组,但并非所有数据库都支持元组。
整洁的但如果你不告诉我们需要相交的领域,我们就帮不了你。你看过JOIN吗?Simply和两个WHERE子句。我只需要找到这些查询的交叉点@Jacobi我对你答案的第二个选择有问题。它似乎与我问题的第二个查询不起作用select*FROM project.backup\U table WHERE project.backup\U table.date=select date FROMproject.main\u inout\u表按日期排序asc限制1且存在从project.backup\u表中选择*,其中包含concatempid,日期不在SELECT concatempid中,日期来自project.main\u inout\u表;我尝试了上面的查询,但是交集部分不起作用。你能检查它的工作原理吗?交集这个词在SQL中没有任何意义,因为你正在使用它。用你的预期结果和一些测试数据更新你的帖子,这样我们可以给你一个答案。或者尝试使用INTERSECT,查看两个查询之间的结果。由于我的声誉@JacobH,我无法发布结果表
SELECT bt.*
FROM project.backup_table bt
WHERE bt.date <= (SELECT MAX(date) FROM project.main_inout_table mit) AND
bt.date >= (SELECT MIN(date) FROM project.main_inout_table mit) AND
NOT EXISTS (SELECT 1
FROM project.main_inout_table mit
WHERE mit.empid = bt.empid AND mit.date = bt.date
);