powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ограничить выборку
23 сообщений из 23, страница 1 из 1
Как ограничить выборку
    #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
Как ограничить выборку
    #39979487
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,

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


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

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

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

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

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

Пока вы себе не ответите на вопрос - по какому правилу выбирается та самая единственная, так и будете стоять на месте. Как сделать - уже ответил.
...
Рейтинг: 0 / 0
Как ограничить выборку
    #39979503
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я же сказал, первое совпадение
...
Рейтинг: 0 / 0
Как ограничить выборку
    #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
Как ограничить выборку
    #39979509
Фотография 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
Как ограничить выборку
    #39979510
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,

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

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

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

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

Тогда и результат не имеет значения.
Впишите 123 и пользуйтесь.
...
Рейтинг: 0 / 0
Как ограничить выборку
    #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
Как ограничить выборку
    #39979722
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
group by и max(Фамилия) или min(Фамилия)
...
Рейтинг: 0 / 0
Как ограничить выборку
    #39979723
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo,

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

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


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

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


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