【问题标题】:Select records where all records with same field have all the same of another field选择具有相同字段的所有记录都与另一个字段相同的记录
【发布时间】: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?当然,这会让你的 watched psuedo-column 变得多余
  • 复杂的故事短片我将在稍后加入 TVSeriesHasTVSeason 并且需要有是/否/部分是否已观看系列中的所有季节
  • 然后将其添加到您的问题中。您目前所拥有的显然根本没有描述问题域
  • 我的问题已明确说明 - 我问是否可以在 SELECT CASE 上执行 WHERE,我没有问其他问题
  • 您可以使用公用表表达式 (CTE),除非您认为这违反了避免子查询的道德立场。

标签: sql sql-server-2008 select case


【解决方案1】:

这是范围的问题。使用 SQL 评估查询的方式,它还不知道您的列是否存在。

您需要按照您的建议进行操作并创建一个子查询以将派生列重新用作变量,或者您需要将派生列表示的逻辑复制粘贴到您的案例陈述中。

【讨论】:

  • 谢谢。这是我一直在寻找的验证。
猜你喜欢
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
相关资源
最近更新 更多