|
JOIN USING()
|
|||
---|---|---|---|
#18+
Поискал в форуме, похоже только Алибек про такой синтакс писал за последние два года, и то вопросы. Попробовал использовать в новом коде ожидая обещанных облегчений со звездочками, но в 11г решение не допилено: tab.* дает ошибку. Кто не в курсе, использование USING() в джойнах позволяет схлопнуть одноименные ключи, тем самым позволяя использовать * и tab.* в подчиненных запросах не прибегая к алиасам. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Но, как уже сказано выше на 11г звездочка только сама по себе и работает. В отличие от ANSI "on", Using() не дает уточнить условие джойна через and/or. Т.е. ограниченное использование, но я нашел по крайней мере две ситуации, где оказался полезен: - он красиво сливает ключ в единый столбец для невнутренних джойнов, как в примере выше - позволяет чисто и кратко записать джоийны по составным ключам, где важен порядок частей составного ключа. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 17:57 |
|
JOIN USING()
|
|||
---|---|---|---|
#18+
НеофитSQL Но, как уже сказано выше на 11г звездочка только сама по себе и работает. З.Ы. Дима, хоть демократически ты был не прав, но по совокупности козлы есть везде :/ ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 18:29 |
|
JOIN USING()
|
|||
---|---|---|---|
#18+
Elic, Для меня в 11g не работает следующее: (ОRА-00904) Код: plsql 1. 2. 3. 4. 5. 6.
Документация говорит, что это работало в 10ке: https://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqljusing.html An asterisk qualified by a table name (for example, COUNTRIES.*) will be expanded to every column of that table that is not listed in the USING clause. Возможно, я что-то делаю не так. Подскажите, как надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 18:53 |
|
JOIN USING()
|
|||
---|---|---|---|
#18+
Если у кого-то join using()/tab.* получилось как в документации, отзовитесь. Не может быть что я первый такое нашел. Базовые вроде вещи.. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2021, 20:43 |
|
JOIN USING()
|
|||
---|---|---|---|
#18+
Еще бы ты документацию про Oracle DB смотрел ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 06:40 |
|
JOIN USING()
|
|||
---|---|---|---|
#18+
НеофитSQL Код: plsql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 14:12 |
|
JOIN USING()
|
|||
---|---|---|---|
#18+
miksoft НеофитSQL Код: plsql 1. 2. 3. 4.
https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_10002.htmUSING column In an outer join with the USING clause, the query returns a single column which is a coalesce of the two matching columns in the join. The coalesce functions as follows: COALESCE (a, b) = a if a NOT NULL, else b. Therefore: A left outer join returns all the common column values from the left table in the FROM clause. A right outer join returns all the common column values from the right table in the FROM clause. A full outer join returns all the common column values from both joined tables. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 14:27 |
|
JOIN USING()
|
|||
---|---|---|---|
#18+
НеофитSQL Если у кого-то join using()/tab.* получилось как в документации, отзовитесь. Не может быть что я первый такое нашел. Базовые вроде вещи.. Смотрим в книгу... Ну и где "как в документации"? Где ты там видишь alias.*? Начни читать доку: USING (column) When you are specifying an equijoin of columns that have the same name in both tables, the USING column clause indicates the columns to be used. You can use this clause only if the join columns in both tables have the same name. Within this clause, do not qualify the column name with a table name or table alias. А для неофитов я бы еще добавил "explicitly or implicitly": SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 14:32 |
|
JOIN USING()
|
|||
---|---|---|---|
#18+
И если запрос написать только с одним джойном, то ошибка получается более "говорящая": Код: plsql 1. 2. 3.
ORA-25154: column part of USING clause cannot have qualifier ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 14:50 |
|
JOIN USING()
|
|||
---|---|---|---|
#18+
Да. Но формально, для неофитов, как раз таки внимательно читающих документацию, но не понимающих суть, здесь сказано, что SY НеофитSQL Если у кого-то join using()/tab.* получилось как в документации, отзовитесь. Не может быть что я первый такое нашел. Базовые вроде вещи.. Смотрим в книгу... Ну и где "как в документации"? Где ты там видишь alias.*? Начни читать доку: USING (column) When you are specifying an equijoin of columns that have the same name in both tables, the USING column clause indicates the columns to be used. You can use this clause only if the join columns in both tables have the same name. Within this clause , do not qualify the column name with a table name or table alias. А для неофитов я бы еще добавил "explicitly or implicitly": SY. Могли бы, конечно, и дописать, что и в select list такие поля не могут иметь квалификацию. Тогда таких вопросов (а по сути - открытий "нас обманывают" ) не было бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2021, 22:21 |
|
JOIN USING()
|
|||
---|---|---|---|
#18+
ASNexus Могли бы, конечно, и дописать, что и в select list такие поля не могут иметь квалификацию. Тогда таких вопросов (а по сути - открытий "нас обманывают" ) не было бы. Так они нигде не могут иметь квалификацию, ни в select list, ни в where clause ни в group by ни в order by ибо поля из using это "собирательный образ". SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 01:06 |
|
JOIN USING()
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 01:09 |
|
JOIN USING()
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров Еще бы ты документацию про Oracle DB смотрел Лол, действительно! Ссылка на док (которую мне не удалось найти для 11.2) на самом деле для какой-то JavaDB ор Оракла, и я этого совершенно не заметил. Разработчики JavaDB предусмотрительно сделали определение table.* в таких джойнах так, чтобы оно исключало колонку которая фигурирует в USING(). Поэтому в этой самой JavaDB можно писать e.* и d.*, a в Оракле - нет. Я не заметил "javadb" в URL, пока Вячеслав не указал на мою ошибку. Ради своего интереса, прогнал такой джойн через разные БД в dbfiddle. DB2, MS SQL и другие такой синтакс разрешают, но ни одна не работает так, как JavaDB - во всех ключ джойна сохраняется в tab.*, и на него можно ссылаться и с квалифаером, и без. Мой вопрос отвечен, спасибо всем кто поучаствовал. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2021, 02:23 |
|
|
start [/forum/topic.php?fid=52&msg=40070530&tid=1880197]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
166ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 245ms |
total: | 518ms |
0 / 0 |