Как лучше всего получить 2 верхние уникальные строки, если в них участвует JOIN? - PullRequest
0 голосов
/ 16 июля 2009

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

select top(2)
    property_id_ref
    ,image_file
    ,property_name 
from property_master a 
inner join image_master b 
    on a.property_id=b.property_id_ref 
inner join customer_master c 
    on a.customer_id=c.customer_id 

Когда я его выполняю, я получаю следующий результат:

512 ~/propertyimg/3954493 id_1.jpg  Commercial Land 
512 ~/propertyimg/3954493.jpg   Commercial Land 

Но мне нужен вывод, отличный property_id_ref со случайным image_file от property_id_ref, например:

512 ~/propertyimg/3954493 id_1.jpg  Commercial Land 
513 ~/propertyimg/3119918 Id.jpg    Residential Plot 

Для этого я сделал запрос вроде:

select top(2) 
    max(pm.property_name) as property_name
    ,max(im.property_id_ref) as property_id_ref
    ,CONVERT(varchar(5000),  max( CONVERT(binary, im.image_file))) as image_file 
from property_master pm
inner join image_master im
    on pm.property_id=im.property_id_ref 
inner join customer_master cm
    on pm.customer_id=cm.customer_id 
group by im.property_id_ref

Итак, я получил тот же вывод, что и ожидал. Я хочу знать, является ли это правильным способом сделать это, или есть какой-то другой лучший способ сделать то же самое?

Я использую SQL Server 2005.

Ответы [ 2 ]

1 голос
/ 16 июля 2009

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

SELECT TOP (2)
    pm.property_id,
    pm.property_name,
    (SELECT TOP 1 image_file
     FROM image_master
     WHERE property_id_ref = pm.property_id) AS image_file
FROM
    property_master pm
-- This is only needed if it's possible that [image_file] can be NULL and you
-- don't want to get those rows.
WHERE
    EXISTS (SELECT * FROM image_master
            WHERE property_id_ref = pm.property_id)

Хотя я предполагаю, что ваш запрос более сложный, но я не могу дать вам более конкретныйзапрос, если вы не отправите свой реальный запрос.

0 голосов
/ 16 июля 2009

То, как вы делаете, является правильным. Группировка по ID_Ref и случайный член по макс. Это полностью нормально, и я не вижу причин, чтобы это изменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...