【问题标题】:SQL Checking for similar items more than onceSQL 检查类似项目不止一次
【发布时间】:2012-06-14 12:45:28
【问题描述】:

架构

Movie(title, year, director, budget, earnings)
Actor(stagename, realname, birthyear)
ActedIn(stagename, title, year, pay)
CanWorkWith(stagename, director)

查找已多次使用的电影标题(SQL Robot DEATH MACHINE 2001、2002、2039)

SELECT M.title
FROM Movie A
LEFT JOIN Movie M ON M.title = A.title AND A.year <> A.year
WHERE M.title IS NULL

所以当它找到另一个在不同年份使用过的标题时,它会显示电影的标题

【问题讨论】:

  • 同一年会有相同的电影片名吗?或者电影片名每年都是独一无二的?
  • 您应该保留最初的问题,以便看到此问题的任何人都知道答案。

标签: sql join


【解决方案1】:
SELECT
    title
FROM
    Movie
GROUP BY
    title
HAVING
    COUNT(*) > 1

【讨论】:

  • 如果电影标题每年都是唯一的,则此方法有效。不幸的是,OP 没有披露该信息。
  • @AlexR。如果同一年有两部电影具有相同的标题,这将起作用,因为结果按title 分组。查询逻辑中不考虑年份列的值。
  • @AdamPorad,但该问题要求提供不止一次但在 不同 年存在的电影的数量(至少问题的第二部分如此)。如果同一年有两次相同的电影标题,它会在不应该出现的时候出现在结果集中。就像亚历克斯说的那样,我们不知道标题是否也可以有相同的年份......在这种情况下,我将修改我的答案以使用JOIN
  • @AlexR。和 Zane Bien:你说得对,关于同名同年份的电影是否应该出现在结果中的问题是模棱两可的。
【解决方案2】:

假设 SQL 2008r2 并且电影基于 Title,Year,Director 是唯一的:

;with cte as (
    Select *, count(*) over(partition by Title) dups
    From movie
)
Select * 
From cte
Where dups> 1

返回已多次使用的所有电影标题。如果你想限制在同一年的同名电影,只需将其添加到partition by即可。

【讨论】:

    【解决方案3】:
    Select M.Title
    From Movie As M
    Where Exists    (
                    Select 1
                    From Movie As M1
                    Where M1.Title = M.Title
                        And M1.Year <> M.Year
                    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-05
      • 2011-09-29
      • 2022-06-11
      • 2016-12-28
      • 2015-11-27
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多