Получить всю строку из первой таблицы и 1 соответствующую строку (столбец) из другой таблицы на основе JOIN - PullRequest
0 голосов
/ 16 июня 2020

У меня есть две таблицы, связанные с галереей изображений, первая таблица хранит названия альбомов, а вторая таблица хранит изображение альбома, мне нужно показать все альбомы на одной странице (альбомы) и связанные изображения на второй странице (альбом-фотографии)

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

Я попытался выполнить запрос JOIN, он вытащил все соответствующие записи из обеих таблиц, в то время как мне нужно только любое изображение, связанное с альбомом чтобы я мог показать его на странице альбома

  SELECT a.AlbumID,Title,AlbumImageName, Description,AlbumDate,AlbumType FROM Albums a LEFT OUTER JOIN AlbumImages i
  ON a.AlbumID = i.AlbumID
   WHERE AlbumType = 1 
  AND  a.IsVisible=1  AND a.IsActive=1 
   ORDER BY AlbumDate DESC

Структура таблицы

Альбомы (AlbumID, Title, AlbumDate, AlbumType, IsVisible) AlbumImages (AlbumImageID, AlbumID, AlbumImageName, ImageCaption, ImageOrder , IsVisible)

Как я могу просто показать детали из первой таблицы и любое изображение, связанное с альбомом на странице альбома, поскольку таблица альбомов не хранит изображения, связанные с альбомом, в таблице альбомов

1 Ответ

0 голосов
/ 16 июня 2020

Вы можете использовать ROW_NUMBER со случайным / неопределенным порядком и просто сохранить «первую» запись изображения для каждого альбома:

WITH cte AS (
    SELECT a.AlbumID, a.Title, i.AlbumImageName, Description, a.AlbumDate, a.AlbumType,
        ROW_NUMBER() OVER (PARTITION BY a.AlbumID ORDER BY (SELECT NULL)) rn
    FROM Albums a
    LEFT JOIN AlbumImages i ON a.AlbumID = i.AlbumID
    WHERE AlbumType = 1 AND a.IsVisible = 1 AND a.IsActive = 1
)

SELECT AlbumID, Title, AlbumImageName, Description, AlbumDate, AlbumType
FROM cte
WHERE rn = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...