表详细信息:
CREATE TABLE Test2 (ID INT, Value INT, other INT);
创建表Test1(ID INT,TYPE INT,其他INT);
插入测试2值(123456、5、12);插入测试2值(123456、10、17);
插入测试 1 值 (123456, 00, 2); 插入测试 1 值 (123456, 01, 6); 插入测试 1 值 (123456, 02, 4);
插入测试 1 值 (987654, 00, 7); 插入测试 1 值 (987654, 01, 8);
插入测试 1 值 (456789, 00, 6); 插入测试 1 值 (456789, 01, 16);
这是我用来避免表测试重复的查询
SELECT DISTINCT t1.ID, t1.TYPE, t1.other, t2.value
FROM Test1 t1 INNER JOIN Test2 t2 ON t1.ID = t2.ID GROUP BY t1.ID, t1.TYPE, t1.other, t2.value ORDER通过 t1.ID ASC;
查询结果:
ID TYPE 其他值 123456 0 2 5 123456 0 2 10 123456 1 6 5 123456 1 6 10 123456 2 4 5 123456 2 4 10
描述:
预期结果是,当我从表中获取匹配记录时。应该从左表(Test1)中获取没有重复记录的记录,并避免从右表(Test2)中获取重复记录。
参考检查图片
预期的查询结果是,
23456 0 2 5 123456 1 6 10 123456 2 4
SQL小提琴链接
尽管您可以在它们的 ID 上加入 2 个表,但您可能需要引入“人工”行号(实际上),并在您的连接中使用它们。
表格和数据
SELECT 和 ROW_NUMBER()
如果您现在加入这两个结果集,您可能更接近您所追求的解决方案。
现在您只需要消除 ID不在Table2 中的行。
DBfiddle (Oracle 18c) SQLfiddle (Oracle 11g)