我有一个查询,其中在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 | 空 |