有一个表tb_user_info
id || updatedTime
1 || 2018-09-21 15:15:49
2 || 2019-01-21 15:15:49
和表tb_user
id || name
1 || Test1
2 || Test2
和其他一些表。
如果要对User表中的每个用户的tb_user_info中的updatedTime更新少于5分钟,我想加入这些表并选择id(user),name(user),并获得“ Y”。
现在我编写了这段代码。
select u.emp_no, u.name, position, d.name as dept_name,
(select if (ui.updatedTime >= NOW() - INTERVAL 5 minute, 'Y', 'N') as test
from tb_user u
inner join tb_user_dept ud
on u.emp_no = ud.emp_no
inner join tb_dept d
on ud.dept_id = d.dept_id
inner join tb_user_info ui
on ud.emp_no = ui.emp_no) as connectYN
from tb_user u
inner join tb_user_dept ud
on u.emp_no = ud.emp_no
inner join tb_dept d
on ud.dept_id = d.dept_id
我必须更改as connectYn部分。
我想要这样的结果。
id || name || connectYN
1 || Test1 || 'Y'
2 || Test2 || 'N'
3 || Test3 || 'N'
4 || Test4 || 'Y'
答案 0 :(得分:1)
您的查询与您的样本数据和预期结果不太匹配。
通过查看您的查询,我觉得您不需要子查询。您可以只var currentColorState : AvailableColor = .white
@objc func handleOpenTermsAndConditions() {
if currentColorState == .white {
currentColorState = .black
} else {
currentColorState = .white
}
self.view.backgroundColor = currentColorState.currentUIColor()
}
所有表并将逻辑直接放在JOIN
子句中,例如。
在没有看到更多数据的情况下很难说的一件事是您是否需要聚合。这是一个没有聚合的版本:
SELECT
答案 1 :(得分:0)
通过将updatedTime放在左侧联接中,我们可以尽早消除。
GROUP BY
确保每个用户只有一行。 MAX(updateTime)
可以确保sql_mode=ONLY_FULL_GROUP_BY
仍然正确:
SELECT
u.emp_no,
u.name,
d.name as dept_name,
IF(ISNULL(MAX(updatedTime)),'N','Y')) connectYN
FROM
tb_user u
INNER JOIN tb_user_dept ud ON u.emp_no = ud.emp_no
INNER JOIN tb_dept d ON ud.dept_id = d.dept_id
LEFT JOIN tb_user_info ui ON ud.emp_no = ui.emp_no
AND ui.updatedTime >= NOW() - INTERVAL 5 minute
GROUP BY u.emp_no, ud.dept_id