(П.С. Я все еще изучаю SQL, и вы можете считать меня новичком)

У меня есть 2 образца таблицы следующим образом:

Таблица 1

|Profile_ID|  |Img_Path|

Таблица 2

|Profile_ID|  |UName|   |Default_Title|

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

Select Profile_Id,UName from 
Table2 Where 
Contains(Default_Title, 'Test')

ORDER BY Profile_Id
OFFSET 5 ROWS
FETCH NEXT 20 ROWS ONLY

( Обратите внимание, что я устанавливаю OFFSET из-за требований.)

Теперь сценарий таков: как только я получу 1 запись из 2-й таблицы, мне нужно извлечь запись из 1-й таблицы на основе Profile_Id.

Итак, мне нужно вернуть следующие 2 результата в одном утверждении:

|Profile_Id|   |Img_Path|

|Profile_Id|   |UName|

И мне нужно вернуть результаты в столбцах бок о бок, как:

|Profile_Id|   |Img_Path|   |UName|

(обратите внимание, мне пришлось объединить 2 Profile_Id столбца в один, поскольку они оба содержат одинаковые данные)

Я все еще изучаю SQL, и я изучаю Union, Join и т. Д., Но я немного запутался в том, какой путь выбрать.

0
Aousaf rashid 28 Май 2019 в 13:38

2 ответа

Лучший ответ

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

select t1.*, t2.UName
from table1 t1 join
     (select Profile_Id, UName
      from Table2
      where Contains(Default_Title, 'Test')
      order by Profile_Id
      offset 5 rows fetch next 20 rows only
     ) t2
     on t2.profile_id = t1.profile_id
1
Gordon Linoff 28 Май 2019 в 10:52
SELECT a.Profile_Id, a.Img_Path, b.UName
FROM table1 a INNER JOIN table2 b ON a.Profile_Id=b.Profile_Id
WHERE b.Default_Title = 'Test'
-1
Rahul Kumar Sharma 28 Май 2019 в 10:47