我正在尝试使用子查询来选择要连接的列,甚至可能: 如果说表b的值等于表a的列名? 请注意,以下示例确实指定了table_b.Column_A,但这是为了使我的问题更清楚,更混乱。 where条件将始终返回单个值/记录。
编辑:如果可以的话,我基本上试图创建一个动态的on子句。
表之间唯一的关系是Table_b包含Table_a的列作为值。
SELECT *
FROM table_a a
INNER JOIN table_b b
ON a.(select column1 FROM table_b WHERE Column1 ='Column_A') = b.Column_A
答案 0 :(得分:2)
这是您想要的吗?
SELECT *
FROM table_a a INNER JOIN
table_b b
ON (b.Column1 = 'Column_A' AND a.column1 = b.column_A) OR
(b.Column1 = 'Column_B' AND a.column1 = b.column_B) OR
(b.Column1 = 'Column_C' AND a.column1 = b.column_C)
您将必须直接列出所有列。另外,JOIN
和OR
的效果通常很差。
您可以使用APPLY
更简洁地表达这一点:
SELECT *
FROM table_b b CROSS APPLY
(SELECT 'Column_A' as colname, b.Column_A as colval FROM DUAL UNION ALL
SELECT 'Column_B', b.Column_B FROM DUAL UNION ALL
SELECT 'Column_C', b.Column_C FROM DUAL
) v JOIN
table_a a
ON a.column1 = v.colval
WHERE v.colname = b.Column1
请注意,此版本可在Oracle 12C +中使用。
答案 1 :(得分:1)
您不能以尝试的方式使用select
语句,但是希望您使用并使用条件代码,例如:
SELECT *
FROM table_a a
INNER JOIN table_b b ON a.column1 = b.Column_A
and b.Column1 ='Column_A'
否则,如果要动态构建查询代码,则应在服务器端构建一个字符串,然后将该字符串用作命令