|
|
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
Добрый день. Подскажите пожалуйста, во вложении структура таблиц. Необходимо получить следующий перечень данных Таблица Б.Name, Таблица Б.Number, Таблица А.ID Если написать селект и связать их по Name получим дублирование Name (Ivan) т.к. в таблице А две записи, но с разными ID. Как исключить дублирование? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 15:23 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
sqlstarterКак исключить дублирование?Никак. На приведённых структурах и данных это невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 15:53 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
Один раз избавиться от дублей и запретить их вводить на будущее. Потом все остальное делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 15:56 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
Самое простое - добавить что-нибудь в названия лишних, например точку, т.е. NameIDIvan111Ivan.222Petr333 Это чтобы по-быстрому задачу порешать, а потом все равно разбираться и наводить порядок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 16:00 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
В таблице А name это ссылка из таблицы Б ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 18:55 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
sqlstarterВ таблице А name это ссылка из таблицы Б Теорию изучал? Хотя бы читал про нормальные формы? ID (абстрактный ключ) для того и придумано чтобы не заморачиваться с такими проблемами как у тебя. Т.е. "ссылка" это ID а не Name. Таблица Б должна быть такой ID Number3211845293 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 19:14 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
Dima TsqlstarterВ таблице А name это ссылка из таблицы Б Теорию изучал? Хотя бы читал про нормальные формы? ID (абстрактный ключ) для того и придумано чтобы не заморачиваться с такими проблемами как у тебя. Т.е. "ссылка" это ID а не Name. Таблица Б должна быть такой ID Number3211845293 Таблица А должна быть такой Не путай человека :-) он и так запутанный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 07:50 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
Это формализованное представление, на деле действительно в таблице поле Name это ID из таблицы Б, но меняется ли от этого суть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 09:09 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
sqlstarterНеобходимо получить следующий перечень данных Таблица Б.Name, Таблица Б.Number, Таблица А.ID Как исключить дублирование? А нету там дублирования! А.ID - разные? значит все корректно! Ошибка в постановке, точнее в том, как Вы постановку задачи нам преподнесли! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 09:13 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
А так, от диалекта SQL зависит... В некоторых диалектах можно написать: Код: sql 1. в других так нельзя написать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 09:20 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
либо пишите: Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 09:23 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
distinct on как понял под ORACLE не проходит. А вот за min() спасибо, решение было рядом, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 09:37 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
sqlstarterрешение было рядом Это не решение, а прямой путь к заднице. На каком основании, по какому критерию, выбрано MIN(). Почему не, например, MAX()? Если связывание выполняется по некоему полю, причём из таблицы берётся только одна запись с таким значением, и не существует критерия выбора одной записи из нескольких - на это поле должно быть наложено требование уникальности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 10:05 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
Почему же? Если задача взять только одну любую запись, вполне себе решение. Размышляя далее, если задача усложняет следующим видом (рисунок), в случае если name дублируется, необходимо учитывать только те записи у которых d=1. Решение видимо возможно, как-то через union? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 11:48 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
sqlstarterесли задача усложняет следующим видом (рисунок), в случае если name дублируется, необходимо учитывать только те записи у которых d=1.Задача никак не усложняется. Одно поле или два - какая разница? просто дополнительное условие в секции ON (или WHERE). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 11:53 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
sqlstarterЕсли задача взять только одну любую запись... Тогда, ИМХО, более правильным будет решение: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 11:57 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
Akinasqlstarterесли задача усложняет следующим видом (рисунок), в случае если name дублируется, необходимо учитывать только те записи у которых d=1.Задача никак не усложняется. Одно поле или два - какая разница? просто дополнительное условие в секции ON (или WHERE). Почему же просто условие? Ведь условие " в случае если name дублируется , необходимо учитывать только те записи у которых d=1". Каким образом отсекать по условию в where? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 12:47 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
sqlstarter Каким образом отсекать по условию в where? То есть так: Код: sql 1. 2. 3. или так: Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 12:54 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
Добрый день. Подскажите пожалуйста, для чего в запросе(oracle 11g) используют плюс (+). К примеру: select * from a,b where a.id = b.num(+) and бла бла бла... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 16:19 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
sqlstarterДобрый день. Подскажите пожалуйста, для чего в запросе(oracle 11g) используют плюс (+). К примеру: select * from a,b where a.id = b.num(+) and бла бла бла...это ораклевый способ сделать outer join. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 17:32 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
White OwlsqlstarterДобрый день. Подскажите пожалуйста, для чего в запросе(oracle 11g) используют плюс (+). К примеру: select * from a,b where a.id = b.num(+) and бла бла бла...это ораклевый способ сделать outer join. это синтаксис для where. кслассический join-синтаксис тоже есть: https://docs.oracle.com/javadb/10.8.2.2/ref/rrefsqlj29840.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2016, 21:45 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
eNoseWhite Owlпропущено... это ораклевый способ сделать outer join. это синтаксис для where. кслассический join-синтаксис тоже есть: https://docs.oracle.com/javadb/10.8.2.2/ref/rrefsqlj29840.html я в чем-то ошибся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 01:04 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
White OwleNoseпропущено... это синтаксис для where. кслассический join-синтаксис тоже есть: https://docs.oracle.com/javadb/10.8.2.2/ref/rrefsqlj29840.html я в чем-то ошибся? да. во фразе "это ораклевый способ сделать outer join". ибо не "ораклевый способ", а способ сделать это используя конструкцию where. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 08:44 |
|
||
|
SQL помощь
|
|||
|---|---|---|---|
|
#18+
eNoseWhite Owlпропущено... я в чем-то ошибся? да. во фразе "это ораклевый способ сделать outer join". ибо не "ораклевый способ", а способ сделать это используя конструкцию where.Этот синтаксис существует только в Оракл. Придуман на заре СУБД, и сохраняется до сих пор в качестве "legacy". Да, в дальнейшем Оракл принял на вооружение ANSI JOIN синтаксис, но не уничтожил свой собственный. И сегодня ты можешь использовать оба. В других СУБД аналогичную задачу решали по другому. В частности в Sybase придумали синтаксис "*=" и "=*", используется точно так же как ораклевый (+), в той же самой where. И означает абсолютно тоже самое. Но еще раз повторю: синтаксис a.f=b.f(+) это чисто ораклевый способ синтаксического задания outer join. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2016, 20:02 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39175193&tid=1340767]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
150ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 438ms |

| 0 / 0 |
