0

我有 4 张桌子:

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所以,我需要在查询结果中返回名称和地址!

任何帮助将不胜感激。

提前致谢

4

2 回答 2

0

您应该在 emp_id 和 id 上使用内部连接

  select TB1.uniqueid
    , TB1.datetime_entry
    , TB1field_0 
    , TB2.datetime_inti 
    , TB2.datetime_end  
    , TB2.id_emp 
    , Tb3.field_1
    , TB3.field_2
    , TB3.field_3
    , TB4.name
  FROM TB1 
  INNER JOIN TB2 ON TB1.uniqueid = TB2.uniqueid
  INNER JOIN TB3 ON TB1.uniqueid = TB3.uniqueid
  INNER JOIN TB4 ON TB2.id_emp = TB4.id
于 2018-03-25T12:35:01.720 回答
0

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

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中没有必要的匹配记录。如果记录始终存在于所有表中,只需使用而不是. 你可以在这里参考更多的解释。TB2TB3TB4JOINLEFT JOIN

于 2018-03-25T12:27:58.293 回答