У меня есть этот запрос:

SELECT distinct
    num as number,
    name as name
    from my_table_name 
 where number = '12345';

И вот результаты:

    number - name

 1. 12345 - mike
 2. 12345 - charlie
 3. 12345 - jose

Когда это происходит, мне нужен новый запрос (числа повторяются или повторяются трижды), покажите мне только один из них. Пример:

   number - name
   12345 - mike

Мне нужен только один из них; позиция не имеет значения. Если он найдет его, распечатайте это и закройте процедуру, функцию или курсор.

1
spikeTJ 22 Окт 2014 в 20:35

4 ответа

Лучший ответ

Distinct будет возвращать результаты, отличные от всех данных, которые вы запрашиваете. Если вам нужен только один из результатов и вы знаете, что используемый результат произвольный, вы можете просто добавить фильтр по номеру строки (как конкретно это делается, зависит от того, какую СУБД вы используете).

Пример Oracle:

select num as "number",
       name as "name"
  from my_table_name 
 where number = '12345'
   and rownum = 1; -- just gets the first row.
1
Daileyo 22 Окт 2014 в 21:30
Спасибо за полировку ответа, Бен. :)
 – 
Daileyo
22 Окт 2014 в 21:31
SELECT * from 
     (SELECT rownum rnum,
        num as number,
        name as name
        FROM my_table_name 
     WHERE number = '12345' )
WHERE rnum = 1
0
22 Окт 2014 в 21:16
Это недопустимый синтаксис Oracle.
 – 
Ben
22 Окт 2014 в 21:12
Это вернет N - 1 строк, а не 1. Вы имели в виду where rnum = 1?
 – 
Ben
22 Окт 2014 в 21:18
2
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего поста. Помните, что вы отвечаете на вопросы читателей в будущем, и эти люди могут не знать причин вашего предложения кода.
 – 
gunr2171
23 Окт 2014 в 00:07

Использовать аналитическую функцию ROW_NUMBER

SELECT *
FROM
(
    select id, name, ROW_NUMBER() OVER ( partition by id order by name asc) as seq
    from tableA
    where number = '12345'
) T
where T.seq =1
0
radar 22 Окт 2014 в 22:02

Если вам все равно, какой из них возвращается, почему вы вообще просите его вернуть?

Однако, чтобы получить одну строку результатов независимо от количества совпадающих строк, вам, вероятно, следует использовать GROUP BY и сводную функцию:

Select 
 num as number, 
 max(name) as name --or min(), or any other summary function that works on this data type
from my_table_name
where num = '12345'
group by num
0
Hellion 22 Окт 2014 в 22:11