我有一个表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的行。感谢您的帮助!
答案 0 :(得分:0)
我忽略了一个附加的WHERE子句。感谢@Eric帮助指出这一点。