我对连接有一个问题,我认为这个连接很容易修复(我想我的脑子里放了个屁)。
下面是我当前的工作查询:
SELECT ADDTIME(journey.departure, notrelatedtoquestion) AS departure
FROM journey
GROUP BY journey.id
ORDER BY departure这里是我想要工作但无法工作的查询:
SELECT ADDTIME(journey.departure, notrelatedtoquestion) AS departure
FROM journey
JOIN journey_non_operation ON journey_non_operation.journey = journey.code
WHERE NOW() NOT BETWEEN journey_non_operation.date_start AND journey_non_operation.date_end
GROUP BY journey.id
ORDER BY departure好的,它正在工作,但问题是,由于新加入的journey_non_operation表的内容,它更改了结果集。
我想要达到的目标很简单。我只想过滤掉journey_non_operation表中有今天日期的行程。但是,由于每次旅行都有许多非操作日期,所以它正在更改结果集。
下面是第一次和第二次并行查询的结果:


如何阻止journey_non_operation连接影响结果集,但使之不选择它们的id位于非操作日期之间的行程?
journey_non_operation的表结构:
id - journey_id - start_date - end_date
谢谢!
发布于 2014-10-15 11:06:11
您可以使用not in运算符而不是join
SELECT ADDTIME(journey.departure, notrelatedtoquestion) AS departure
FROM journey
WHERE journey.code NOT IN (SELECT journey
FROM journey_non_operation
WHERE NOW() NOT BETWEEN date_start AND
date_end)
GROUP BY journey.id
ORDER BY departure发布于 2014-10-15 11:19:41
如果您使用左联接并将中间子句作为ON的一部分,那么每个匹配都意味着不应该显示旅程。因此,您只需在左联接后显示行而不匹配记录。
SELECT journey.id, ADDTIME(journey.departure, notrelatedtoquestion) AS departure
FROM journey
LEFT JOIN journey_non_operation ON journey_non_operation.journey = journey.code
AND NOW() BETWEEN journey_non_operation.date_start AND journey_non_operation.date_end
WHERE journey_non_operation.id is null
GROUP BY journey.id
ORDER BY departurehttps://stackoverflow.com/questions/26380910
复制相似问题