2016-12-30 2 views
0

Я изо всех сил пытаюсь добиться того, что я пытаюсь сделать, мне нужно выбрать 1-ю запись из таблицы 1, имеющую соответствие в таблице 2 и таблицу обновлений 2 со значением.Выберите 1-ю подходящую запись из таблицы 1, которая имеет совпадение в таблице 2

Я пробовал множество способов и посмотрел на многочисленные сообщения. Но я либо могу только вернуть 1 запись или все записи.

Мои предыдущие попытки ниже:

SELECT a.URL, 
    a.Caption 
FROM [EAN].[DBO].[tblHotelImageList] a 
WHERE a.EANHotelID IN 
    (SELECT b.EanHotelId FROM [EAN].[DBO].[tblEanFullTextSearch] b 
) 
GROUP BY a.URL, 
    a.Caption; 

Выше возвращает все записи

SELECT a.Caption, 
     a.URL 
    FROM [EAN].[dbo].[tblHotelImageList] a 
    LEFT JOIN [EAN].[dbo].[tblEanFullTextSearch] b 
    ON b.EanHotelId = a.EANHotelID 
    AND b.EanHotelId = 
     (SELECT TOP 1 
       a.EANHotelID 
      FROM [EAN].[dbo].[tblHotelImageList] 
      WHERE a.EANHotelID = b.EanHotelId 
     ) 
; 

Выше возвращает все записи

Приведенный выше код на данный момент только пытается получить записи, Я не начинал при попытке обновить таблицу с записями

+0

Привет DVT Я только пытаюсь сделать выбор, попытаюсь обновить, как только я преодолею проблему, я заявил, что в моем вопросе. Нет порядка, сразу после 1-го записей –

+0

Итак, вы просто хотите, чтобы первая запись была возвращена вашим первым запросом? Как вы определяете, что такое первая запись? Как Top 1 ORDER BY, что определяет сначала. – JeffO

ответ

1

Вместо left join используйте outer apply:

Обычно, когда вы хотите одну строку, вы хотите строку, основанную на определенном порядке. Это то, что '??' для.

Вы можете использовать аналогичную логику для UPDATE.

+0

Привет, Гурвиндер Сингх, это не работает, как было раньше. Комната Ресторан http: //hotels/1000000/10000/100/1/1_13_b.jpg http: // отели/1000000/10000/100/1/1_14_b.jpg 211452 Идентификатор извещения - это то же самое 211452 –

0

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

SELECT TOP 1 
    a.Caption, 
    a.URL 
FROM [EAN].[dbo].[tblEanFullTextSearch] b 
INNER JOIN [EAN].[dbo].[tblHotelImageList] a 
    ON b.EanHotelId = a.EANHotelID 
ORDER BY a.EANHotelID; 

Если вам нужен первый матч для всех EanHotelId значений, можно изменить запрос, как это:

SELECT TOP 1 
    a.Caption, 
    a.URL 
FROM [EAN].[dbo].[tblEanFullTextSearch] b 
INNER JOIN (
    SELECT Caption, 
     URL, 
     EanHotelId, 
     ROW_NUMBER() OVER (Order By EanHotelId) as RowID 
     FROM [EAN].[dbo].[tblHotelImageList] 
    ) a 
    ON b.EanHotelId = a.EANHotelID 
WHERE RowID = 1 
ORDER BY a.EANHotelID; 

Там, вероятно, еще критерии выбора первого матч, но это не в вашем вопросе.

+0

Hi Laughing Vergil, к сожалению, оба примера возвращают только 1 строку –

+0

Второй пример неверен, если вы хотите все случаи. Удалите предложение «Top 1» из инструкции SELECT. Моя опечатка, моя вина. –

Смежные вопросы