gpt4 book ai didi

mysql - 查找两个选择查询的交集

转载 作者:行者123 更新时间:2023-11-29 18:50:33 24 4
gpt4 key购买 nike

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

表格是:

maintable

backuptable

我的尝试:

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) and exists (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()。这些可以组合成一个子查询或连接,但这遵循您最初的公式。
  • 最后一个子查询使用 EXISTS 而不是 CONCAT()。实际上,这也可以将 IN 与元组一起使用(MySQL 支持,但不是所有数据库)。

关于mysql - 查找两个选择查询的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44368885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com