В базе данных есть таблицы Фотографии и фотоальбомы. Мне нужен запрос, который выберет все альбомы и только одну фотографию из каждого альбома. Мне нужна версия SQL и LINQ этого запроса. Заранее спасибо.sql и linq query
ответ
В Linq я не испытал, что в нем, так что я буду только дать SQL Server Query
SELECT a.*,b.MyPhoto FROM PhotoAlbums a,(SELECT Top 1 myPhoto from Photos Where AlbumID = a.ID) b
или Этот
SELECT a.AlbumID, a.Title, a.Date, (SELECT TOP (1) c.PhotoID FROM Photos c WHERE(c.AlbumID = a.AlbumID)) AS PhotoID FROM PhotoAlbums as a
Пожалуйста, см. Мой новый вопрос –
если таблицы, как:
PhotoAlbums
AlbumID PK
...
Photos
PhotoID PK
AlbumID FK
Photo
...
:
вот SQL-запрос:
SELECT
a.*,p.Photo
FROM PhotoAlbums a
LEFT OUTER JOIN (SELECT
AlbumID,MIN(PhotoID) AS MinPhotoID
FROM Photos
GROUP BY AlbumID
) dt ON a.AlbumID=dt.AlbumID
LEFT OUTER JOIN Photos p ON dt.MinPhotoID=p.PhotoID
рабочий пример:
DECLARE @PhotoAlbums table (AlbumID int)
INSERT @PhotoAlbums VALUES (1)
INSERT @PhotoAlbums VALUES (2)
INSERT @PhotoAlbums VALUES (3)
DECLARE @Photos table (PhotoID int,AlbumID int, Photo varchar(10))
INSERT @Photos VALUES (1,1,'A')
INSERT @Photos VALUES (2,1,'B')
INSERT @Photos VALUES (3,1,'C')
INSERT @Photos VALUES (4,2,'AA')
INSERT @Photos VALUES (5,3,'AAA')
INSERT @Photos VALUES (6,3,'BBB')
SELECT
a.*,p.Photo
FROM @PhotoAlbums a
LEFT OUTER JOIN (SELECT
AlbumID,MIN(PhotoID) AS MinPhotoID
FROM @Photos
GROUP BY AlbumID
) dt ON a.AlbumID=dt.AlbumID
LEFT OUTER JOIN @Photos p ON dt.MinPhotoID=p.PhotoID
ВЫВОД:
AlbumID Photo
----------- ----------
1 A
2 AA
3 AAA
(3 row(s) affected)
hmmm ... Когда я пытаюсь выполнить ваш запрос и Kronass, VS2008 форматирует запрос, а затем возвращает ошибку. Является ли SQL одинаковым для MySQL и MSSQL? –
И да, таблицы, как вы предполагали, –
и сообщение об ошибке было бы? –
Запрос Linq может быть что-то вроде этого:
from album in context.PhotoAlbums
from photo in album.Photos.Take(1).DefaultIfEmpty()
select new
{
Album = album,
Photo = photo
}
Это работает! благодаря –
- 1. LINQ to SQL query
- 2. Linq to SQL - Query
- 3. LINQ TO SQL Query
- 4. sql query в Linq
- 5. SQL Query to Linq GroupBy и Max
- 6. WP7 LINQ to SQL и Aggregate query
- 7. Datediff sql query to linq lambda query
- 8. Linq query w/sub query и max
- 9. Linq to SQL Search Query
- 10. Linq Query Где() SQL% эквивалент
- 11. Преобразование SQL в Linq Query
- 12. Sql to Linq Query Issue
- 13. Linq для SQL "2 Query"
- 14. Rewrite SQL to LINQ query
- 15. Sql запросов к Linq Query
- 16. SQL Query to LINQ conversion
- 17. Generic LINQ TO SQL Query
- 18. Linq to SQL Slow Query
- 19. SQL to LINQ query asp.net
- 20. Linq Query Count и GroupBy
- 21. Sql Query to Linq To Sql
- 22. Что быстрее между Linq к Sql И SQl Query
- 23. Linq query SUM и COUNT
- 24. LINQ 2 SQL Query ObjectDisposed Exception
- 25. Linq to Entities или SQL Query Diet
- 26. .NET LINQ to SQL query efficiency
- 27. linq to sql query с несколькими параметрами
- 28. SQL Query to Linq To Entities
- 29. Linq Sql Query Error для получения значения
- 30. Linq to Sql Query - лучшее решение (оптимизация)
Какие фото из каждого альбома вы хотите? –
на данный момент любая фотография .. позже я отредактирую таблицу фотографий так, что у нее есть поле «albumcover», но теперь мне нужен случайный номер –
ваш выбранный запрос неэффективен, так как он должен запускать другой запрос, чтобы найти фотографию для каждой возвращаемой строки из фотоальбомов. Вам будет намного лучше использовать производную таблицу и присоединиться к PhotoAlbums к этому. –