我们在下面有两个与客户相关的表,一个带有红色行的查询,用于显示不期望的结果。我们正在尝试为customer_data
中的每个客户获取结果,以包括其各自的最新phone_number
(基于customer_phones
字段的updated
表中),这是默认值,而不是默认值已删除(显示在下面的查询中)。 customer_data.customer_id
与customer_phones.user_id
相同,我们在此处进行左联接。
1)数据库表名称/数据
customer_data
customer_phones
2)查询
SELECT cd.id, cd.customer_id, cd.customer_name, cp.phone_number, cp.updated
FROM customer_data cd
LEFT JOIN customer_phones cp ON cp.user_id=cd.customer_id
AND cp.is_default_phone='1' AND cp.deleted IS NULL
ORDER BY cd.id
3)结果(红色的不希望有的行)
不需要红色行,因为每个客户只能拥有一个既是默认电话又是最新更新的电话号码(如果他们有多个默认电话号码,则具有最新更新的电话号码才是正确的电话号码) )。
我们希望这些表在几个月后会有很多字段,并希望确保如果使用某种子查询,我们没有n + 1问题的解决方案。那么,查询表以获得上面期望的结果却没有红色不需要的行的最有效方法是什么?
答案 0 :(得分:1)
您必须在ON子句中再设置一个条件,以仅获取最新的更新行:
Error
Traceback (most recent call last):
File "C:\<path>\class_tools.py", line 16, in replace_timedelta_str
datetime.timedelta.__str__ = TimedeltaNoDays.__str__
TypeError: can't set attributes of built-in/extension type 'datetime.timedelta'