Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在teradata中将表的一列连接到其他表的多列_Sql_Teradata - Fatal编程技术网

Sql 在teradata中将表的一列连接到其他表的多列

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 *

我有一个表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
**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问题的原因和方式好吗?