MySQL查询-多个联接

时间:2019-09-11 23:16:17

标签: mysql sql join

我有一个表t1,该表充满了由键标识的运算符的度量标准,我将其称为PID,并且我试图从另一个表t3检索状态列,该表通过不同的标识运算符密钥类型,我将其称为SID。问题是需要附加表t2才能将SID映射到PID。

我需要检索t3中的所有信息,如果t1中没有可用于运算符的数据,则返回null。

表的结构为:

Table 1
----------------------------
| PID | ... | ... | Date   |
----------------------------
| 1   | ... | ... | 9/09/19|
----------------------------
| 1   | ... | ... | 9/10/19|
----------------------------
| 2   | ... | ... | 9/09/19|
----------------------------
| 2   | ... | ... | 9/10/19|
----------------------------

Table 2
-----------------
|  SID  |  PID  | 
-----------------
|   01  |   1   | 
-----------------
|   02  |   1   | 
-----------------
|   10  |   2   | 
-----------------
|   11  |   2   |
-----------------

Table 3
----------------------------
|  SID  | Status | Date    |
----------------------------
|   01  |   P    | 9/09/19 |
----------------------------
|   02  |   P    | 9/10/19 |
----------------------------


我已经尝试了一些查询,从我读到的内容来看,我需要做一个LEFT JOIN,因为我需要保留第一个表中的所有内容,如果没有行匹配第一个表,则返回null。我不确定的一件事是,因为一个SID可以有多个SID,但是我不确定查询的行为。如果所有SID状态都属于同一个PID,则它们应该是统一的,这样它只会返回第一个匹配项吗?

我当前的查询:

SELECT t1.*,  t3.Status
FROM Table1 t1,
  LEFT JOIN Table2 t2
    ON t1.PID = t2.PID
  LEFT JOIN Table3 t3
    ON t2.SID = t3.SID AND t1.Date = t3.Date
ORDER BY t1.PID, t1.Date

到目前为止,最接近我想要的是上面的查询。我曾尝试对其进行修改,但问题是它似乎遗漏了没有关联状态的所有PID。

我希望看到类似的东西

--------------------------------------
| PID | ... | ... |  Date  |  Status |
--------------------------------------
| 1   | ... | ... | 9/09/19|    P    |
--------------------------------------
| 1   | ... | ... | 9/10/19|    P    |
--------------------------------------
| 2   | ... | ... | 9/09/19|   null  | 
--------------------------------------
| 2   | ... | ... | 9/10/19|   null  |     
--------------------------------------

但是,我得到的结果却遗漏了带有PID 2的行。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我忽略了一个附加的WHERE子句。感谢@Eric帮助指出这一点。