'SQL - How To Use "CROSS APPLY" In Query
I have two tables (carousels and carousel_images)
carousels table
| id | small_img_1 | small_img_2 | large_img_1 | large_img_2 | img_cta_1 | img_cta_2 |
|---|---|---|---|---|---|---|
| 75 | 101 | 102 | 103 | 104 | cta_1 | cta_2 |
| 76 | 201 | 202 | 203 | 204 | xxx | xxx |
carousel_images table
| id | url | alt_tag |
|---|---|---|
| 101 | http_101 | text_101 |
| 102 | http_102 | text_102 |
| 103 | http_103 | text_103 |
| 104 | http_104 | text_104 |
Expected Result I would like to return the following results. Which selects all the images required to build a carousel where carousel.id == 1.
| img_id | small_img | small_img_url | small_img_alt | large_img | large_img_url | large_img_alt | img_cta |
|---|---|---|---|---|---|---|---|
| 1 | 101 | http_101 | text_101 | 103 | http_103 | text_103 | cta_1 |
| 2 | 102 | http_102 | text_102 | 104 | http_104 | text_104 | cta_2 |
Issue - This is how far I've gone. I can't get results for large_img_1 and large_img_2 induced in my results.
| img_id | small_img | small_img_url | small_img_alt | img_cta |
|---|---|---|---|---|
| 1 | 101 | http_101 | text_101 | cta_1 |
| 2 | 102 | http_102 | text_102 | cta_2 |
This is my query so far.
SELECT
[img_id],
[small_img],
[large_img] [img_cta],
[carousel_images].[url] AS 'small_img_url',
[carousel_images].[alt_tag] AS 'small_img_alt'
FROM
[dbo].[carousels] CROSS APPLY(
VALUES
(1, [small_img_1], [img_cta_1]),
(2, [small_img_2], [img_cta_2])
) V(img_id, small_img, img_cta)
LEFT OUTER JOIN [carousel_images] ON [small_img] = [carousel_images].id
WHERE
[carousel_images] = 75;
Can someone please help? I've been stuck for days.
Also its a legacy system, so that's why the table structure is the way it is. I can't change it unfortunately :(
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
