Sql 在teradata中将表的一列连接到其他表的多列
我有一个表table1和列a,BA和B构成主键,C,D,E和table2和列F 我需要提取A和B的不同值,其中C、D或E是有效的。 需要满足的要求为表1.C=表2.F或表1.D=表2.F或表1.E=表2.F 我使用的SQL如下所示:Sql 在teradata中将表的一列连接到其他表的多列,sql,teradata,Sql,Teradata,我有一个表table1和列a,BA和B构成主键,C,D,E和table2和列F 我需要提取A和B的不同值,其中C、D或E是有效的。 需要满足的要求为表1.C=表2.F或表1.D=表2.F或表1.E=表2.F 我使用的SQL如下所示: sel A,B from table1 inner join table2 on table1.C=table2.F **union** sel A,B from table1 inner join table2 on table1.D=table2.F *
sel A,B from table1
inner join table2
on table1.C=table2.F
**union**
sel A,B from table1
inner join table2
on table1.D=table2.F
**union**
sel A,B from table1
inner join table2
on table1.E=table2.F
是否有更好的方法使所有这些都可以安装在一个连接中?假设表1的PK上有两个连接:
SELECT A,B FROM
table1
INNER JOIN
table2 ON table1.C=table2.F
OR table1.D=table2.F
OR table1.E=table2.F
SELECT DISTINCT
T1.A,
T1.B
FROM
table1 AS T1
INNER JOIN table2 AS T2 ON
T1.A = T2.A AND
T1.B = T2.B
WHERE
T1.C = T2.F OR
T1.D = T2.F OR
T1.E = T2.F
我会尝试以下方法:
SELECT t1.A, t1.B
FROM table1 t1 INNER JOIN table2 t2
ON t2.F IN (t1.C, t1.D, t1.E);
您已经在此处标记了您正在使用的SQL Server、MySQL和teradata。请包含示例数据和预期结果,以便我们更好地了解您的问题。另外是MySQL还是SQL Server?我已经删除了不同的dbms标记。把其中一个放回去,就是实际使用的dbms!当然,OR将导致产品加入。那些桌子有多大?顺便说一句,OR连接通常是坏数据模型的标志。这会起作用,但性能会很差。我更喜欢1条件下的内部连接,使用UNION。我不确定为什么性能会比使用UNIONWelcome差!!如果你得到了答案,请接受答案,并通过此链接,你可以了解union与join的性能比较。请您在这个答案中添加其他信息,解释这段代码修复OP问题的原因和方式好吗?