mysql选择是否存在

mysql选择是否存在,mysql,select,join,Mysql,Select,Join,我正在尝试编写SELECT语句,它将返回一些元素+当前时间和创建或编辑日期之间的日期差。若字段被编辑,我应该从编辑元素后更新的其他表中获取编辑的日期,若不是,我应该从当前表中获取创建的日期,因为该元素与其他编辑的元素表没有关系,并计算DATEDIFFNOW、date\u created/date\u edited。我写了选择,它给我带来了正确的日期编辑的元素,和其他选择,它带来了所有元素,如果他们被编辑,它给我带来了不正确的日期差异。所以总而言之,我需要形成一个表,它给我带来了计算日期差的元素

我正在尝试编写SELECT语句,它将返回一些元素+当前时间和创建或编辑日期之间的日期差。若字段被编辑,我应该从编辑元素后更新的其他表中获取编辑的日期,若不是,我应该从当前表中获取创建的日期,因为该元素与其他编辑的元素表没有关系,并计算DATEDIFFNOW、date\u created/date\u edited。我写了选择,它给我带来了正确的日期编辑的元素,和其他选择,它带来了所有元素,如果他们被编辑,它给我带来了不正确的日期差异。所以总而言之,我需要形成一个表,它给我带来了计算日期差的元素

SELECT
table1.name,
table1.sales_stage,
users.user_name,
DATEDIFF(NOW(), table1_edit.date_edited) as DaysOnStage
FROM table1
join users on table1.assigned_user_id = users.id
join table1_edit on table1.id = table1_edit.parent_id
WHERE table1.sales_stage = table1_edit.after_value_string;
这一个带来了所有编辑值与正确的日期计算

SELECT
table1.name,
table1.sales_stage,
users.user_name,
DATEDIFF(NOW(), table1.date_created) as DaysOnStage
FROM table1
join users on table1.assigned_user_id = users.id;
这一个给我带来了所有元素,但若它们被编辑了,当然会有糟糕的日期差异。需要以某种方式组合这些选择并形成单个表。
提前谢谢

我认为您可以通过左连接执行所需操作,然后使用COALESCE选择正确的值:

SELECT t1.name, t1.sales_stage, u.user_name,
       DATEDIFF(NOW(), COALESCE(te.date_edited, t1.date_created)) as DaysOnStage
FROM table1 t1 join
     users u
     on t1.assigned_user_id = u.id LEFT JOIN
     table1_edit te
     on t1.id = te.parent_id
WHERE t1.sales_stage = te.after_value_string;
应该会有帮助

SELECT
table1.name,
table1.sales_stage,
users.user_name,
if (table1_edit.parent_id is null, DATEDIFF(NOW(), table1_edit.date_edited), DATEDIFF(NOW(), table1.date_created)) as DaysOnStage
FROM table1
join users on table1.assigned_user_id = users.id
left join table1_edit on table1.id = table1_edit.parent_id
enter code here

您可以左键连接编辑表,并在mysql函数中的日期字段中放置一个ISNULL IFNULL:

SELECT
table1.name,
table1.sales_stage,
users.user_name,
DATEDIFF(NOW(), IFNULL(table1_edit.date_edited,table1.date_created) as DaysOnStage
FROM table1
join users on table1.assigned_user_id = users.id
left join table1_edit on table1.id = table1_edit.parent_id
WHERE table1.sales_stage = table1_edit.after_value_string;
使用SQL时,必须学习左/外连接表:

或者,您可以在查询中使用UNION:

SELECT
table1.name,
table1.sales_stage,
users.user_name,
DATEDIFF(NOW(), table1_edit.date_edited) as DaysOnStage
FROM table1
join users on table1.assigned_user_id = users.id
join table1_edit on table1.id = table1_edit.parent_id
WHERE table1.sales_stage = table1_edit.after_value_string;
This one brings all edited values with correct date calculated.
UNION
SELECT
table1.name,
table1.sales_stage,
users.user_name,
DATEDIFF(NOW(), table1.date_created) as DaysOnStage
FROM table1
join users on table1.assigned_user_id = users.id;