【发布时间】:2013-10-30 01:06:27
【问题描述】:
有没有一种方法可以在不使用子查询的情况下引用我在 select 语句中创建的列?
SELECT TVSeason.tvSeasonID, UserHasWatchedTVSeason.*,
CASE
WHEN userhaswatchedtvseason.tvSeasonID IS NULL THEN 'No'
ELSE 'Yes'
END as watched
FROM TVSeason
LEFT JOIN UserHasWatchedTVSeason
ON TVSeason.tvSeasonID = UserHasWatchedTVSeason.tvSeasonID
WHERE watched = 'No'
“watched”列仅存在于查询的选择部分。显然我尝试了上述方法,找不到列。我想知道是否还有另一种方法我应该这样做 - 我试图避免使用额外的子查询使查询混乱。
【问题讨论】:
-
为什么不只是
WHERE userhaswatchedtvseason.tvSeasonID IS NULL?当然,这会让你的watchedpsuedo-column 变得多余 -
复杂的故事短片我将在稍后加入 TVSeriesHasTVSeason 并且需要有是/否/部分是否已观看系列中的所有季节
-
然后将其添加到您的问题中。您目前所拥有的显然根本没有描述问题域
-
我的问题已明确说明 - 我问是否可以在 SELECT CASE 上执行 WHERE,我没有问其他问题
-
您可以使用公用表表达式 (CTE),除非您认为这违反了避免子查询的道德立场。
标签: sql sql-server-2008 select case