Можем ли мы выбрать первую строку данных из столбца в SQL? - PullRequest
0 голосов
/ 02 мая 2019

У меня есть таблица с несколькими данными для одного и того же идентификатора. Я хочу получить данные первой строки для идентификатора.

Я добавил приведенный ниже SQL, который я пробовал.

SELECT
"client"."id",
"client"."company_name",
"client_details"."address"
from Client
LEFT OUTER JOIN "client_details" ON ("client"."id" = "client_details"."client_id")

Поскольку у меня несколько адресов для одного и того же идентификатора, можем ли мы получить только первый идентификатор?

В настоящее время я получаю 2 строки с разными адресами.

Ответы [ 4 ]

2 голосов
/ 02 мая 2019

Вы можете добавить к своему SQL LIMIT 1, и в случае, если вы хотите быть уверенным в порядке, вы также можете добавить к своему SQL ORDER BY...

1 голос
/ 02 мая 2019

Вы можете использовать distinct on:

select distinct on (c.id) c.id, c.company_name, cd.address
from Client c left join
     client_details cd
     on c.id = cd.client_id
order by c.id, ?;

? для столбца, который определяет порядок (определение «первый»).Я предполагаю, что cd.id - это то, что вам нужно.

Обратите внимание, что этот запрос удаляет двойные кавычки и вводит псевдонимы таблиц.Это легче для глаз (для чтения) и пальцев (для ввода).

0 голосов
/ 02 мая 2019

Если есть поле, вы можете заказать результаты, используя боковое соединение, например,

SELECT
"client"."id",
"client"."company_name",
"client_details"."address"
from Client
left join lateral (
    select *
    from client_details cd
    where cd.client_id = client.id
    order by [some_ordering_field]
    limit 1
) "client_details" on true
0 голосов
/ 02 мая 2019

использование row_number()

select * from
(
SELECT
"client"."id",
"client"."company_name",
"client_details"."address",row_number() over(partition by "client"."id" order by "client_details"."address") as rn
from Client
LEFT OUTER JOIN "client_details" ON "client"."id" = "client_details"."client_id"
)A where rn=1
...