多个连接语句/多个 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 JOIN
s,否则您将只能得到同时存在于两个表中的结果。然后你需要使用 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)
如果伪想法有点混乱,我们深表歉意。
基本上我有 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 JOIN
s,否则您将只能得到同时存在于两个表中的结果。然后你需要使用 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)