Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ограничить выборку / 23 сообщений из 23, страница 1 из 1
14.07.2020, 14:30
    #39979482
sc2r2bey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
Есть запрос
Код: sql
1.
2.
3.
4.
5.
SELECT
t1.f1,
t2.f1
FROM t1
INNER JOIN t2 ON t1.fn = t2.fn



То если условиям t1.fn = t2.fn удовлетворяет больше одной записеи

Получается дублирующая информация в выборке, а мне надо, чтобы выбиралось, только первое совпадение, не более
...
Рейтинг: 0 / 0
14.07.2020, 14:33
    #39979487
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
sc2r2bey,

Первая по какому условию? Если способны сформулировать - row_number(). Или cross apply (select top 1).
...
Рейтинг: 0 / 0
14.07.2020, 14:35
    #39979489
sc2r2bey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
получается вот так
авторПараметр 1 Иванов
Параметр 1 Петров
Параметр 2 Иванов


А мне надо
авторПараметр 1 Иванов
Параметр 2 Иванов
...
Рейтинг: 0 / 0
14.07.2020, 14:37
    #39979491
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
sc2r2bey,

А чего это Иванов везде первый? Petrov lives matter!
...
Рейтинг: 0 / 0
14.07.2020, 14:41
    #39979495
sc2r2bey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
это просто примет, там может быть что угодно
...
Рейтинг: 0 / 0
14.07.2020, 14:42
    #39979496
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
sc2r2bey,

И тем не менее, чем Иванов в примере лучше Петрова? Почему именно строка с Ивановым должна быть выбрана?

Как только ответите себе на этот вопрос - смотрите на первый ответ в теме.

упд. ключевое слово - сортировка
...
Рейтинг: 0 / 0
14.07.2020, 14:46
    #39979500
sc2r2bey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
я не способен сформировать - row_number()
мне просто надо присоединить к левой таблице одну единственную запись из правой таблице, даже, если этому условию соответствуют две и более записей из правой таблице
...
Рейтинг: 0 / 0
14.07.2020, 14:48
    #39979502
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
sc2r2bey,

Пока вы себе не ответите на вопрос - по какому правилу выбирается та самая единственная, так и будете стоять на месте. Как сделать - уже ответил.
...
Рейтинг: 0 / 0
14.07.2020, 14:49
    #39979503
sc2r2bey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
я же сказал, первое совпадение
...
Рейтинг: 0 / 0
14.07.2020, 15:02
    #39979508
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
sc2r2bey
я же сказал, первое совпадение

Код: sql
1.
2.
3.
4.
5.
6.
SELECT top(1) with ties
t1.f1,
t2.f1
FROM t1
INNER JOIN t2 ON t1.fn = t2.fn
order by row_number()over(partition by t1.f1 order by (select null))
...
Рейтинг: 0 / 0
14.07.2020, 15:03
    #39979509
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
sc2r2bey,

Первое откуда? Первое по какому критерию? Повторяемость результата не требуется?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
select
    1 as id
into
    #t1
union all
select
    2 as id;
    
select
    1 as id,
    'White Rabbit' as name_
into
    #t2
union all
select
    1 as id,
    'Black Magic' as name_
union all
select
    2 as id,
    'We Follow' as name_
union all
select
    2 as id,
    'By Alice' as name_;
    
select
    t1.id
    , t2.name_
from
    #t1 t1
cross apply (select top 1 name_ from #t2 t2 where t2.id = t1.id) t2;

select
    t.id
    , t.name_
from
    (
        select
            t1.id
            , t2.name_
            , row_number() over(partition by t1.id order by t1.id) rn_
        from
            #t1 t1
        inner join #t2 t2 on
            t2.id = t1.id
    ) t
where
    t.rn_ = 1;
    
select top 1 with ties
    t1.id
    , t2.name_
from
    #t1 t1
inner join #t2 t2 on
    t1.id = t2.id
order by
    row_number() over(partition by t1.id order by t1.id);
...
Рейтинг: 0 / 0
14.07.2020, 15:04
    #39979510
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
sc2r2bey,

А потом замените в примере union all на union и подумайте, почему так.
...
Рейтинг: 0 / 0
14.07.2020, 15:05
    #39979511
sc2r2bey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
Первое откуда?
не имеет значения
Первое по какому критерию?
не имеет значения
Повторяемость результата не требуется?
нет
...
Рейтинг: 0 / 0
14.07.2020, 15:07
    #39979513
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
sc2r2bey,

Надеюсь, вы никогда не будете работать в финансовом секторе или медицине, с таким подходом.
...
Рейтинг: 0 / 0
14.07.2020, 15:18
    #39979518
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
sc2r2bey
Первое откуда?
не имеет значения
Первое по какому критерию?
не имеет значения
Повторяемость результата не требуется?
нет
row_number() order by ( newid() )
...
Рейтинг: 0 / 0
14.07.2020, 16:06
    #39979529
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
sc2r2bey,

выберите через cross apply top (1) из соседней таблицы. Или используйте коррелированный запрос, что равнозначно в этой ситуации.
...
Рейтинг: 0 / 0
14.07.2020, 16:33
    #39979549
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
sc2r2bey
получается вот так
авторПараметр 1 Иванов
Параметр 1 Петров
Параметр 2 Иванов

Я что-то тут не вижу дублирующейся информации - все записи разные. Ты не мог бы понятней объяснить задачу?
...
Рейтинг: 0 / 0
14.07.2020, 16:49
    #39979557
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
sc2r2bey
Первое откуда?
не имеет значения
Первое по какому критерию?
не имеет значения
Повторяемость результата не требуется?
нет

Тогда и результат не имеет значения.
Впишите 123 и пользуйтесь.
...
Рейтинг: 0 / 0
15.07.2020, 00:17
    #39979676
maay123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
[quot sc2r2bey#22167200]получается вот так
автор Параметр 1 Иванов
Параметр 1 Петров

Параметр 2 Иванов

у вас на самом деле идет нумерация
Параметр 1 Иванов
Параметр 2 Петров
Параметр 3 Иванов


вот эти помеченные они уже разные а если так то вам уже дали ответ (row_number)-вот ссылка вся инфа об 4рех функций
https://info-comp.ru/obucheniest/441-ranking-functions-in-transact-sql.html#:~:text=отличия и примеры.-,ROW_NUMBER,которая возвращает просто номер строки.&text=где, partition by — это не,е.
...
Рейтинг: 0 / 0
15.07.2020, 09:00
    #39979722
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
group by и max(Фамилия) или min(Фамилия)
...
Рейтинг: 0 / 0
15.07.2020, 09:05
    #39979723
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
L_argo,

Подойдёт для вырожденного случая с одним полем.

Хотя с подходом автора, можно и так )
...
Рейтинг: 0 / 0
15.07.2020, 10:55
    #39979792
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
sc2r2bey
я же сказал, первое совпадение


это опасные термины при работе с реляционными базами
...
Рейтинг: 0 / 0
15.07.2020, 12:01
    #39979835
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить выборку
Ролг Хупин,

+1 верно писать "любое" или "первое из списка, упорядоченного по таким-то условиям".
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ограничить выборку / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]