我需要比较两个表,并获得未完成或不存在的pn。 我无法在任何地方找到我需要的答案。以下是我需要的表格和示例输出。非常感谢你能帮助我的人。如何选择不在另一个表中的记录?
表1:
+------------+----------+------------+----+---------------------+
| cert | job | pcmk | pn | stat |
+------------+----------+------------+----+---------------------+
| MF21600001 | 6216 | A148 | 1 | 2015-08-14 13:20:29 |
| MF21600001 | 6216 | A148 | 2 | |
+------------+----------+------------+----+---------------------+
表2:
+-----------+----------+----+
| job | pcmk | pn |
+-----------+----------+----+
| 6216 | A148 | 1 |
| 6216 | A148 | 2 |
| 6216 | A148 | 3 |
+-----------+----------+----+
实施例输出在表2中没有的表1或状态=空白/ NULL的行:
+------------+------+------+----+
| cert | job | pcmk | pn |
+------------+------+------+----+
| MF21600001 | 6216 | A148 | 2 |
| MF21600001 | 6216 | A148 | 3 |
+------------+------+------+----+
行,我采取了第一个想法,并玩了一下。
SELECT Table1.cert, pninput.job, pninput.pcmk, pninput.pn, pn.stat
FROM Table1, Table2
WHERE NOT EXISTS (SELECT *
FROM Table1
WHERE Table1.pcmk = Table2.pcmk AND Table1.job = Table2.job AND Table1.stat = '')
但是现在每一个证书被配对每pcmk和工作,即使每个证书只能有1个作业和1个pcmk而且还抽放35+秒运行
一个简单的子查询就像'select * from table 1 where pm not in(select from table2)'。可能还有其他更好的解决方案,但如果性能不成问题,这将起作用。 –
您可以在http://sqlfiddle.com/上创建表格和样本数据,并与我们分享链接。 – seahawk