mysql - JOIN后多表选择

标签 mysql sql

我有 4 张 table :

TB1:
+---------------+---------------------+----------+
| uniqueid      | datetime_entry      | field_0  |
+---------------+---------------------+----------+
| 1517326336.62 | 2018-01-30 17:32:16 | somedata |
| 1517326336.62 | 2018-01-30 17:32:22 | somedata |
| 1517326477.64 | 2018-01-30 17:34:37 | somedata |
+---------------+---------------------+----------+

TB2:
+---------------+---------------------+---------------------+--------+
| uniqueid      | datetime_inti       | datetime_end        | id_emp |
+---------------+---------------------+---------------------+--------+
| 1517326336.62 | 2018-01-30 17:32:16 | 2018-01-30 17:32:16 | 1      |
| 1517326336.62 | 2018-01-30 17:32:22 | 2018-01-30 17:32:16 | 2      |
| 1517326477.64 | 2018-01-30 17:34:37 | 2018-01-30 17:32:16 | 3      |
+---------------+---------------------+---------------------+--------+

TB3:
+---------------+----------+----------+----------+
| uniqueid      | field_1  | field_2  | field_3  |
+---------------+----------+----------+----------+
| 1517326336.62 | somedata | somedata | somedata |
| 1517326336.62 | somedata | somedata | somedata |
| 1517326477.64 | somedata | somedata | somedata |
+---------------+----------+----------+----------+

TB4:
+----+-----------+
| id | name      |
+----+-----------+
| 1  | Name_1    |
| 2  | F Name L. |
| 3  | F_name L. |
+----+-----------+

其中 3 个具有相同的 uniqueID 字段..所以经过一番搜索,我发现我必须使用 JOIN 从 3 个表中获取我想要的数据,现在我需要添加第 4 个表,但是第 4 个表没有 uniqueID 字段。

SELECT *
FROM (
    TB1  
    LEFT JOIN TB2 USING (uniqueid) 
    LEFT JOIN TB3 USING (uniqueid)
    )
WHERE 
    TB1.datetime_entry>='2018-01-30 00:00:00' 
    AND TB1.datetime_entry<='2018-01-30 00:59:59' 
    AND TB1.new_status <>  'status1' 
    AND TB1.new_status <>  'status2' 
ORDER BY TB1.datetime_entry;

TB2 中有一个名为 id_emp 的字段,现在我需要加入 TB4 其中包括 名称地址所以,我需要在查询结果中返回名称和地址!!

任何帮助将不胜感激。

提前致谢

最佳答案

您可以使用 ON 表达式JOIN 表。假设TB2有一个名为id_emp的字段,该字段是TB4的id字段的外键 。然后以这种方式加入:

SELECT *
FROM
    TB1 LEFT JOIN TB2
        USING (uniqueid) 
    LEFT JOIN TB3
        USING (uniqueid)
    LEFT JOIN TB4
        ON TB2.id_emp = TB4.id    -- JOIN table with ON expression
WHERE
    TB1.datetime_entry >= '2018-01-30 00:00:00' 
    AND TB1.datetime_entry <= '2018-01-30 00:59:59' 
    AND TB1.new_status <> 'status1' 
    AND TB1.new_status <> 'status2' 
ORDER BY TB1.datetime_entry;

我看到您正在使用LEFT JOIN,这意味着TB1中可能有记录,但TB2中不一定存在匹配记录, TB3TB4。如果记录始终存在于所有表中,则只需使用 JOIN 而不是 LEFT JOIN。更多解释可以引用here .

关于mysql - JOIN后多表选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49475678/

相关文章:

mysql - 我应该增加表的数量吗?

mysql为两个日期之间的小时差添加列

mysql - 选择两个日期之间的事件的最佳 SQL 查询

sql - 从同一列中的两行获取时间和超时

mysql - 如何获取此查询中重复项的大小?

mysql - GROUP BY 有 MAX 日期

mysql - 通过用户与城市关系查找国家/地区,其中用户与一个国家/地区的所有城市相关

mysql - 如何从 mySQL 中的组合表中获取列的总和?

Java MySQL 查询问题

java - 具有 ON DUPLICATE KEY UPDATE 的插入查询的 Statement 类中的executeUpdate(String sql) 方法