Смешивание ON и использование в одном соединении - PullRequest
1 голос
/ 13 марта 2009

Есть ли способ сделать следующее в Oracle:

SELECT *
FROM   Tbl1
JOIN   Tbl2 
USING  (col1)
AND ON Tbl1.col2 = Tbl2.col3

Ответы [ 3 ]

1 голос
/ 13 марта 2009
SELECT * FROM TBL1 JOIN TBL2 ON TBL1.COL1 = TBL2.COL1 AND TBL1.COL2 = TBL2.COL3

С уважением K

1 голос
/ 13 марта 2009

В стандартном SQL вы можете использовать либо USING, либо ON, но не оба одновременно. Если бы вы могли использовать оба, вы бы пропустили AND из вашего примера.


Комментарий PMV (точнее, вопрос - см. Также ответ автора):

Моя проблема в том, что у меня есть куча таблиц, все с соединениями USING. Если я пытаюсь добавить таблицу с разными именами ключей, я получаю неоднозначную ошибку столбца. Есть ли изящный способ сделать это без преобразования всех моих объединений в ON объединение?

Что ж, лучший способ ограничить ущерб, нанесенный печально неправильно названными столбцами, - это, вероятно, (и примерно - я не отлаживал SQL ниже):

SELECT *
    FROM (SELECT *
             FROM Tbl1
                  JOIN Tbl2 USING (col1, col2, col3, col4)
                  JOIN Tbl3 USING (col2, col4, col6, col23)
                  JOIN Tbl4 USING (col2, col8, col3, col23)
          ) AS SystematicNaming
          JOIN Tbl5
              ON  SystematicNaming.Col1 = Tbl5.Col1
              AND SystematicNaming.ColA = Tbl5.PoorlyNamedColA
              AND SystematicNaming.ColB = Tbl5.PoorlyNamedColB

Это сохраняет удобную и систематическую нотацию USING как можно дольше, в то же время управляя объединением с Tbl5 так, как оно должно управляться с учетом неоднородных имен столбцов, необходимых для объединения с Tbl5.

Я не уверен, что это лучший макет запроса, хотя я думаю, что это разумно.

0 голосов
/ 13 марта 2009
SELECT *
FROM   Tbl1
       INNER JOIN Tbl2
ON     Tbl1.col1 = Tbl2.col1
   AND Tbl1.col2 = Tbl2.col3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...