我有一个连接的问题,我想这将很容易修复(我想我有一个脑屁)。
这是我当前的工作查询:
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
谢谢!
答案 0 :(得分:1)
您可以使用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
答案 1 :(得分:0)
如果你使用LEFT JOIN并将BETWEEN子句作为ON的一部分,那么每次匹配都意味着不应该显示旅程。因此,您只需在LEFT JOIN之后显示没有匹配记录的行。
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 departure