当我在表上执行左连接时,如果在右表中找到更多值,则会复制左表中的结果。 即使右表上有多个值,我怎么才能从左边返回不同的值。 (即使右表上有多个图像,也只返回一部电影)
SELECT
*
FROM
Movie AS M
LEFT JOIN MovieImage AS MI WITH (NOLOCK) ON M.TheMovieDbId = MI.TheMovieDbId
WHERE
MI.ImageType = 'Poster' AND MI.ImageSize = 'Thumb' OR MI.ImageType IS NULL
答案 0 :(得分:3)
通常,如果您不想要结果,则不会使用“正确的表格”。
SELECT
*
FROM
Movie AS M
WHERE
EXISTS (SELECT *
FROM
MovieImage AS MI
WHERE
M.TheMovieDbId = MI.TheMovieDbId
AND
MI.ImageType = 'Poster'
AND
MI.ImageSize = 'Thumb')
要拥有没有行匹配的行(根据您的查询),请使用此
SELECT
*
FROM
Movie AS M
WHERE
EXISTS (SELECT *
FROM
MovieImage AS MI
WHERE
M.TheMovieDbId = MI.TheMovieDbId
AND
MI.ImageType = 'Poster'
AND
MI.ImageSize = 'Thumb')
UNION
SELECT * FROM Movie
否则,你说“给我一个来自MovieImage的任意行”,我从来不理解......
其他说明:
答案 1 :(得分:1)
如果您只想选择一个,为什么不选择group by
,然后选择min()
或max()
?如果您想要获得所有电影,无论他们是否有图像,都可以使用left join
。如果您只想要包含图像的电影,请使用inner join
。如果您只想要具有特定数量图像的电影,请使用having
子句。
简化示例:
Select M.Name, isnull(max(MI.ImageName), 'No Image')
From Movie M
Left Join MovieImage MI
On M.TheMovieDbId = MI.TheMovieDbId
Group By M.Name