MySQL连接2个表,结果应该在第三个表中

MySQL连接2个表,结果应该在第三个表中,mysql,subquery,Mysql,Subquery,我有3个表:请求、d_请求、传递请求和s_请求、发送请求 部分d_请求和s_请求始终是相同的用户ID、票证创建日期和其他一些数据。因此,它从这些表中分块,并在每次插入db时放入请求 现在我需要做以下工作:连接请求和d_请求选择一些数据,然后我需要确保这样的选择在s_请求的send_列中 SELECT r.type, r.request_from, r.request_to, d.departure_date FROM requests as r JOIN d_requests a

我有3个表:请求、d_请求、传递请求和s_请求、发送请求

部分d_请求和s_请求始终是相同的用户ID、票证创建日期和其他一些数据。因此,它从这些表中分块,并在每次插入db时放入请求

现在我需要做以下工作:连接请求和d_请求选择一些数据,然后我需要确保这样的选择在s_请求的send_列中

SELECT r.type, r.request_from, r.request_to, d.departure_date
    FROM requests as r
    JOIN d_requests as d ON r.request_id = d.requests_id
    WHERE r.type='d' AND r.request_from='Beijing' 
    AND r.request_to='Tokyo' AND d.departure_date 
          IN (SELECT s.s_before from s_requests s where s.s_before<='user_defined_date')
    ORDER BY d.departure_date 

我有一个结果,但它是局部的。正如我从DB中看到的,它应该给我一些输出行,而它只生成一个包含1行的表。即使我将user_defined_date设置为2025-12-12之类的日期,输出仍然是1行,而所有门票都在2017年和2018年初。

我想您可能需要这样的日期

SELECT r.type, r.request_from, r.request_to, d.departure_date
FROM requests as r
INNER JOIN d_requests as d ON r.request_id = d.requests_id
INNER JOIN s_requests as s ON r.request_id = s.requests_id
WHERE r.type='d' AND r.request_from='Beijing' 
AND r.request_to='Tokyo' AND s.s_before<='user_defined_date'
ORDER BY d.departure_date 

但是,当我不知道这些表的完整模式以及您试图实现的目标时,很难提出建议

如果您删除了中的最终条件d.离开日期。。。然后它会返回更多的记录吗?如果是这样的话,那么至少你知道这种情况有问题。也许d.出发日期与另一个表中s_之前的日期不完全匹配。i、 e.秒或毫秒是否不同?只比较出发日期和用户定义的日期不是更好吗?@RichS是的,没有子查询,查询将返回更多结果。@RichS只比较出发日期和用户定义的日期不是更好吗?-这正是我正在做的,但要做到这一点,我需要查看3个表。为了确定记录不匹配的原因,您可以只使用子查询运行单独的查询吗。是否将出发日期与子查询中的记录进行比较?如果它们不完全匹配,这就是查询无法返回您期望的结果的原因。我知道最终我需要从2个子查询中进行选择,即:1个请求与ID上的s_请求之间的连接,2个请求与ID上的d_请求之间的连接,以及在2个子查询之后,我需要在结果表中比较这一切,并按出发日期排序。问题是:我觉得通过稍微重新构造或重新格式化模式本身,或者通过请求本身的替代结构,这样做可能更容易,我更喜欢这两个选项中的最新选项,但实际上做不到=。我最终发现这正是我需要做的,而且效果很好,-只需获取用户定义的日期即可解决所有问题。但还是要感谢你的建议和努力——我会把它作为一个答案。