Select 在 2 个日期之间,但也 select NULL 值
Select Between 2 dates but also select NULL values
我正在尝试 运行 一个查询,其中 select 日期介于 2 个值之间
OR ( `order_products`.`deleted_at` BETWEEN
'2021-01-01 00:00:00' AND '2021-07-28 23:59:59' )
但我还需要收集具有 NULL 值的 order_products。
这完全有可能吗,就像我把一个
OR `order_products`.`deleted_at` IS NULL
在我的代码中,它似乎只是 return absolutley 数据库中的所有内容:-(
我当前的上下文代码是:
SELECT
`orders`.`id`,
`orders`.`reference`,
`orders`.`order_date`,
`orders`.`cancellation_date`,
`order_products`.`description`,
`order_products`.`st_code`,
`order_products`.`supplier_stock_code`,
`order_products`.`status`,
`order_products`.`deleted_at`,
`supplier`.`name`,
order_invoice.created_at AS credit_date,
fitters.account_number AS fitter_account_number,
fitters.name AS fitter
FROM `order_products`
LEFT JOIN `orders` ON (`orders`.`id` = `order_products`.`order_id`)
LEFT JOIN `supplier` ON (`order_products`.`supplier_id` = `supplier`.`id`)
LEFT JOIN `fitters` ON (`orders`.`fitter_id` = `fitters`.`id`)
JOIN `order_invoice` ON (`order_invoice`.`order_id` = `orders`.`id`)
WHERE `cancellation_date` IS null
AND `cancellation_date` BETWEEN '2021-01-01 00:00:00' AND '2021-07-28 23:59:59'
AND `order_invoice`.`status` = 'approved'
OR (`order_products`.`deleted_at` BETWEEN '2021-01-01 00:00:00'
OR `order_products`.`deleted_at` IS NULL
AND '2021-07-28 23:59:59')
AND `order_products`.`product_type` = 'product'
ORDER BY `orders`.`id` ASC
请尝试将 where 条件更改为
其中 cancellation_date
为空
AND cancellation_date
BETWEEN '2021-01-01 00:00:00' AND '2021-07-28 23:59:59'
AND order_invoice
.status
= 'approved'
或(order_products
.deleted_at
为空或 order_products
.deleted_at
在 '2021-01-01 00:00:00' 和 '2021-07-28 23:59:59')
AND order_products
.product_type
= 'product'
你的语法不对。您需要:
WHERE order_products.deleted_at >= '2021-01-01' AND
order_products.deleted_at < '2021-07-29' OR
order_products.deleted_at IS NULL
请注意,我使用日期不等式编写了日期时间检查,这对我来说似乎更清晰。此外,我们在这里不需要任何额外的括号,因为 AND
的优先级高于 OR
.
我正在尝试 运行 一个查询,其中 select 日期介于 2 个值之间
OR ( `order_products`.`deleted_at` BETWEEN
'2021-01-01 00:00:00' AND '2021-07-28 23:59:59' )
但我还需要收集具有 NULL 值的 order_products。
这完全有可能吗,就像我把一个
OR `order_products`.`deleted_at` IS NULL
在我的代码中,它似乎只是 return absolutley 数据库中的所有内容:-(
我当前的上下文代码是:
SELECT
`orders`.`id`,
`orders`.`reference`,
`orders`.`order_date`,
`orders`.`cancellation_date`,
`order_products`.`description`,
`order_products`.`st_code`,
`order_products`.`supplier_stock_code`,
`order_products`.`status`,
`order_products`.`deleted_at`,
`supplier`.`name`,
order_invoice.created_at AS credit_date,
fitters.account_number AS fitter_account_number,
fitters.name AS fitter
FROM `order_products`
LEFT JOIN `orders` ON (`orders`.`id` = `order_products`.`order_id`)
LEFT JOIN `supplier` ON (`order_products`.`supplier_id` = `supplier`.`id`)
LEFT JOIN `fitters` ON (`orders`.`fitter_id` = `fitters`.`id`)
JOIN `order_invoice` ON (`order_invoice`.`order_id` = `orders`.`id`)
WHERE `cancellation_date` IS null
AND `cancellation_date` BETWEEN '2021-01-01 00:00:00' AND '2021-07-28 23:59:59'
AND `order_invoice`.`status` = 'approved'
OR (`order_products`.`deleted_at` BETWEEN '2021-01-01 00:00:00'
OR `order_products`.`deleted_at` IS NULL
AND '2021-07-28 23:59:59')
AND `order_products`.`product_type` = 'product'
ORDER BY `orders`.`id` ASC
请尝试将 where 条件更改为
其中 cancellation_date
为空
AND cancellation_date
BETWEEN '2021-01-01 00:00:00' AND '2021-07-28 23:59:59'
AND order_invoice
.status
= 'approved'
或(order_products
.deleted_at
为空或 order_products
.deleted_at
在 '2021-01-01 00:00:00' 和 '2021-07-28 23:59:59')
AND order_products
.product_type
= 'product'
你的语法不对。您需要:
WHERE order_products.deleted_at >= '2021-01-01' AND
order_products.deleted_at < '2021-07-29' OR
order_products.deleted_at IS NULL
请注意,我使用日期不等式编写了日期时间检查,这对我来说似乎更清晰。此外,我们在这里不需要任何额外的括号,因为 AND
的优先级高于 OR
.