我必须获得客户的正确数据,这些数据可能已经过时,而不是最新的数据。
表格:
Customer
+---------------------------+---------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------------------------+---------------+------+-----+---------+
| customer_id | int(11) | NO | PRI | NULL |
| customer_data | varchar(255) | NO | | NULL |
| customer_valid_from | datetime | NO | | NULL |
| customer_valid_till | datetime | YES | | NULL |
+---------------------------+---------------+------+-----+---------+
Address
+---------------------------+---------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------------------------+---------------+------+-----+---------+
| address_id | int(11) | NO | PRI | NULL |
| address_street | varchar(255) | NO | | NULL |
| address_valid_from | datetime | NO | | NULL |
| address_valid_till | datetime | YES | | NULL |
| customer_id | int(11) | NO | | NULL |
+---------------------------+---------------+------+-----+---------+
Details
+---------------------------+---------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------------------------+---------------+------+-----+---------+
| detail_id | int(11) | NO | PRI | NULL |
| detail_street | varchar(255) | NO | | NULL |
| detail_valid_from | datetime | NO | | NULL |
| detail_valid_till | datetime | YES | | NULL |
| customer_id | int(11) | NO | | NULL |
+---------------------------+---------------+------+-----+---------+
一开始我得到了一个日期和 customer_id。 现在我想选择所有数据,这些数据涉及在该日期具有给定 customer_id 的客户,该日期也已给出。
我的 SQL 目前看起来像这样:
SELECT customer.*,address.*,details.*
FROM customer
JOIN address
ON address.customer_id = customer.customer_id
JOIN details
ON details.customer.customer_id = customer.customer.id
WHERE customer.customer_valid_from <= givenDate
AND customer.customer_valid_till >= givenDate
AND address.address_valid_from <= givenDate
AND address.address_valid_till >= givenDate
AND details.details_valid_from <= givenDate
AND details.details_valid_till >= givenDate
customer.customer_id = givenID;
在我看来,有一个部分缺失了。 如果一条记录与 valid_from <= GiveDate 匹配,但 valid_till 为 NULL 或“0000-00-00 00:00:00”怎么办?
我考虑过 IF 或 CASE 子句,但我使用 MySQL 的经验并不令人满意。
最佳答案
试试这个 from
子句:
WHERE customer.customer_valid_from <= givenDate AND
(customer.customer_valid_till >= givenDate OR
customer.customer_valid_till IS NULL OR
customer.customer_valid_till = '0000-00-00 00:00:00'
) AND
address.address_valid_from <= givenDate AND
(address.address_valid_till >= givenDate OR
address.address_valid_till IS NULL OR
address.address_valid_till = '0000-00-00 00:00:00'
) AND
details.details_valid_from <= givenDate AND
(details.details_valid_till >= givenDate OR
details.details_valid_till IS NULL OR
details.details_valid_till = '0000-00-00 00:00:00'
)
它只是添加了您似乎要求的逻辑。
关于mysql - 获取日期和 null 之间的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29031029/