MySQL查询从不同的列中查找数据并离线检查

时间:2019-02-19 00:10:25

标签: mysql database

有一个表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'

2 个答案:

答案 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