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

Multiple joins statements / multiple table query

如果伪想法有点混乱,我们深表歉意。

基本上我有 3 个 table,table 在属性上没有完全匹配。

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

中的任何值匹配

table 1 中的任何值 2-5 是否匹配 table 3 的某个属性

如果有匹配,它们将被插入到新的table。

当我 运行 没有另一个内部连接时,我似乎从任一语句中收到了我想要的过滤结果。当我将它们加在一起时,我没有得到正确的结果。

是否有任何方法可以合并到内部联接或使用任何其他类型的 syntax/command 来进行比较 search/insert?

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

INSERT
INTO newtable
(
 attribute1new
 attribute2new
 attribute3new
 attribute4new
 attribute5new
 attribute6new
)
SELECT
    t1.attribute1,
    t1.attribute2,
    t1.attribute3,
    t1.attribute4,
    t1.attribute5,
    t1.attribute6
FROM table1 t1
INNER JOIN table2 t2
ON t1.attribute2 = table2.attribute9
OR t1.attribute3 = table2.attribute9
OR t1.attribute4 = table2.attribute9
OR t1.attribute5 = table2.attribute9

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

您需要使用 LEFT JOINs,否则您将只能得到同时存在于两个表中的结果。然后你需要使用 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

您可以使用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)