Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查找两个select查询的交集_Mysql_Sql - Fatal编程技术网

Mysql 查找两个select查询的交集

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

我需要在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_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
                 );