【问题标题】:SQL code need help understandingSQL代码需要帮助理解
【发布时间】:2014-08-29 05:09:57
【问题描述】:

我正在开发一个电影数据库,我认为为将来设置某种类型的家长控制可能是个好主意。我写了一些 SQL 代码,它在大多数情况下都有效,但我不知道为什么。

在我的主要电影表中,我的电影分级为标准等级 g、pg、pg-13、r 和 NC-17。

这是我使用的SQL代码

Select title
From movies
Where rating < "r";

虽然它仍然显示 NC-17 节目,但我工作。如果我将 r 等级更改为 NC-17,它只会显示 g 等级的节目。

我知道我可以输入更长的 SQL 来给我想要的匹配项,但我想了解为什么这段代码会这样执行。

感谢您的帮助。

【问题讨论】:

  • “但我想了解为什么这段代码会这样执行。”查看每个字符串中第一个字符的 ascii 数值。它可以帮助你理解。 asciitable.com NC-17 。 +1 就某事物的内部运作提出合理的问题。
  • 谢谢大家的解释和其他解决方案。

标签: mysql sql


【解决方案1】:

MySQL 如何知道R 小于NC-17? MySQL 知道如何对数字和字母进行排序,但不知道电影评分。您必须分配评级数字并根据该数字进行排序。

例如:

Rating    Value
------------------
  G         1
  PG        10
  PG-13     20
  R         30
  NC-17     40

比给每部电影评分的数值(或使用连接),然后按那个排序。

【讨论】:

    【解决方案2】:

    SQL 不理解电影分级系统。 &lt; 运算符按字母顺序查看字符串。因此,当您说&lt; 'R' 时,它会查找字母表中所有以R 之前的字母开头的评级。由于评级选项数量有限,因此您最好按照以下方式进行操作:

    SELECT title
    FROM movies
    WHERE rating NOT LIKE 'R'
    AND   rating NOT LIKE 'NC-17'
    

    【讨论】:

      【解决方案3】:

      如果您想对它们进行排名,以下是可能对您有用的查询:

      SELECT m.title, m.rating
      FROM 
      (
        SELECT s.title, s.rating, 
               CASE WHEN s.rating = 'G' THEN 1 
                    WHEN s.rating = 'PG' THEN 2
                    WHEN s.rating = 'PG-13' THEN 3
                    WHEN s.rating = 'R' THEN 4
                    WHEN s.rating = 'NC-17' THEN 5
                    ELSE 6 END AS MovieRanking
        FROM movies s
      ) m
      WHERE m.MovieRanking < 4
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-29
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-08
        • 2018-01-27
        • 1970-01-01
        相关资源
        最近更新 更多