SQL查询,如何从一个列表中获取所有元素,只从另一个表中获取相似的元素

我有2个表,他们有PartID作为他们的相似性分支。 我需要从表2的第一个表格和第二个表格中拉出3列。

我遇到的问题是表1有时会有比表2更多或不同的PartID,这是可以的。 在第三个表中,我希望能够运行一个查询,并将第一个表和第二个表中的所有PartID都提供给我,即使它们不存在于另一个表中。 但是,如果他们都存在,我希望数据能像往常一样在一起

这段代码显示了两个表格之间相似的PartID:

SELECT `Sheet1$`.ENSPIECEID, `Sheet1$`.`Part Number`, `Sheet1$`.Description,`Sheet1$`.TITRETYPE, `Sheet1$`.Utilization, `Sheet2$`.Notes, `Sheet2$`.Justification FROM `Sheet1$` `Sheet1$`, `Sheet2$` `Sheet2$` WHERE `Sheet1$`.ENSPIECEID = `Sheet2$`.ENSPIECEID 

我需要这个,以便我可以标记哪些PartID只来自第一张,哪些只来自第二张。

 SELECT `Sheet1$`.ENSPIECEID, `Sheet1$`.`Part Number`, `Sheet1$`.Description,`Sheet1$`.TITRETYPE, `Sheet1$`.Utilization, `Sheet2$`.Notes, `Sheet2$`.Justification FROM `Sheet1$` `Sheet1$` LEFT JOIN `Sheet2$` `Sheet2$` on `Sheet1$`.ENSPIECEID = `Sheet2$`.ENSPIECEID 

将返回sheet1中的所有logging,仅返回匹配的sheet2中的所有logging; 假设没有其他语法错误。

你可以做到这一点(你将不得不replace你的表和列的名称):

对于这个例子,我使用了testing表结构: 在这里看到它

 tab1 (partid int, description varchar(100)) tab2 (partid int, variation varchar(100)) 

select两个表中的零件ID

 select * from tab1 t1 join tab2 t2 on t1.partid = t2.partid; 

select只在第一个表格中的零件ID

 select * from tab1 t1 left outer join tab2 t2 on t1.partid = t2.partid where variation is null; 

select仅在第二个表格中的零件ID

 select * from tab2 t2 left outer join tab1 t1 on t2.partid = t1.partid where description is null; 

因此,要select所有不在另一个表中的部件ID,请将最后两个查询的结果合并

 select t1.partid from tab1 t1 left outer join tab2 t2 on t1.partid = t2.partid where variation is null union select t2.partid from tab2 t2 left outer join tab1 t1 on t2.partid = t1.partid where description is null;