多个连接语句/多个表查询

时间:2018-02-05 17:38:47

标签: sql inner-join insert-into

如果伪想法有点混乱,请道歉。

基本上我有3个表,这些表与属性没有完全匹配。

我需要比较表1中任何值2-5是否与某个属性上表2中的任何值匹配

OR

表1中的任何值2-5是否与特定属性

上的表3匹配

如果匹配,则会将它们插入到新表格中。

当我在没有另一个的情况下运行Inner join时,我似乎从任何一个语句都收到了我想要的过滤结果。当我将它们加在一起时,我得不到正确的结果。

有没有办法组合内部联接或使用任何其他类型的语法/命令来进行这种比较搜索/插入?

提前感谢您提供的任何帮助!

Additional information: Cache::createRegion: "exampleRegion" region exists in local cache

2 个答案:

答案 0 :(得分:1)

您需要使用LEFT JOIN,否则您将只获得两个表中存在的结果。然后,您需要使用NULL处理来确保至少有一个匹配(在WHERE中)。您可以使用COALESCE

执行此操作
SELECT
    t1.attribute1,
    t1.attribute2,
    t1.attribute3,
    t1.attribute4,
    t1.attribute5,
    t1.attribute6
FROM table1 t1
LEFT JOIN table2 t2
ON t1.attribute2 = t2.attribute9
OR t1.attribute3 = t2.attribute9
OR t1.attribute4 = t2.attribute9
OR t1.attribute5 = t2.attribute9

LEFT JOIN table3 t3
ON t1.attribute2 = t3.attribute8
OR t1.attribute3 = t3.attribute8
OR t1.attribute4 = t3.attribute8
OR t1.attribute5 = t3.attribute8

WHERE COALESCE(t2.attribute9,t3.attribute8) IS NOT NULL

答案 1 :(得分:0)

您可以使用EXISTS来获得预期结果:

SELECT
    t1.attribute1,
    t1.attribute2,
    t1.attribute3,
    t1.attribute4,
    t1.attribute5,
    t1.attribute6
FROM table1 t1
where exists (select * from table2 t2
where t1.attribute2 = t2.attribute9
OR t1.attribute3 = t2.attribute9
OR t1.attribute4 = t2.attribute9
OR t1.attribute5 = t2.attribute9)

OR

exists (select * from table3 t3
WHERE t1.attribute2 = t3.attribute8
OR t1.attribute3 = t3.attribute8
OR t1.attribute4 = t3.attribute8
OR t1.attribute5 = t3.attribute8)