正在将JOIN子句中的筛选器转换为WHERE子句



我有一个查询,其中在JOIN子句中添加了一个筛选条件。我必须把那个条件移到WHERE子句。有可能吗?

代码:

SELECT DISTINCT
ut.vehicle_id, DATE(ut.DATE) Date, 
ROW_NUMBER() OVER (PARTITION BY ut.vehicle_id ORDER BY DATE(UT.DATE)) RN
FROM 
awsdatacatalog.waves.unlimited_wash_transaction ut
LEFT JOIN 
awsdatacatalog.waves.wash_invoice WI ON WI.invoice_id = ut.invoice_id
LEFT JOIN 
awsdatacatalog.waves.unlimited_customer uc ON UC.vehicle_id = UT.vehicle_id
AND start_date BETWEEN DATE('2021-05-01') AND DATE('2021-05-30')
WHERE 
DATE(UT.date) BETWEEN DATE('2021-05-01') AND Date('2021-05-31') 
AND (ut.Status IN ('RESIGNUP', 'RECURRING')) 
AND UC.vehicle_id IS NULL
AND WI.Status IN ('Completed', 'PartiallyRefunded') 
AND (ut.Is_Refunded IS NULL OR CAST(ut.Is_Refunded AS INTEGER) = 0)
ORDER B Y
ut.vehicle_id

我想移动条件:

start_date BETWEEN Date('2021-05-01') AND Date('2021-05-30')

WHERE子句,但如果我这样做,我会得到不正确的结果。

请帮帮我。

将联接条件从外部(左/右(联接移动到where子句是个坏主意。让我解释一下原因。

比方说,我们有两张桌子,员工和他们的汽车

员工|emp_id |名称||--------|------||1|卡尔||2|唐纳德||3|Paula|

汽车|emp_id |汽车||--------|----||1|欧宝||3|BMW|

现在让我们想象一下,我们不喜欢宝马,所以根据我们的口味加入那些桌子吧

select e.name, c.car
from employees e
LEFT join cars.c
on e.emp_id = c.emp_id
AND c.car <> 'BMW'

该查询将首先过滤掉cars表;宝马;行,并将执行外部联接"左联接";是指";将第一个表中的所有行连接到第二个表,并用null填充缺失的行";。

所以,结果会像一样

name汽车
Carl欧宝
唐纳德null
Paula

最新更新