Можете ли вы использовать оператор Select в предложении joins on? - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь использовать подзапрос, чтобы выбрать столбец, к которому нужно присоединиться, возможно ли это: если, скажем, таблица 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

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Это то, что вы хотите?

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 s с OR s обычно имеют очень низкую производительность.

Вы можете выразить это более кратко, используя 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

Обратите внимание, что эта версия работает в Oracle12C +.

0 голосов
/ 26 октября 2018

Вы не можете использовать оператор select так, как пытаетесь, но ищете код, который вы можете использовать, и условия, например:

SELECT *
FROM table_a a
INNER JOIN table_b b ON a.column1 = b.Column_A 
        and b.Column1 ='Column_A' 

В противном случае, если вы хотите динамически построить код запроса, вы должны построить строку на стороне сервера, а затем использовать эту строку в качестве команды

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...