【问题标题】:database select数据库选择
【发布时间】:2011-10-21 03:41:43
【问题描述】:

我有 3 张桌子:

  1. film(film_id, filmname) PK (film_id)
  2. category(category_id, categoryname) PK (category_id)
  3. film_category(包含主键(film_id)和(category_id))

问题是我想从 category_id = 3 的电影表中选择所有filmname

这个mysql选择怎么做?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    select
      film.filmname
    from
      film
      join film_category
      on film.film_id = film_category.film_id
    where
      film_category.category_id = 3
    

    Further info.

    【讨论】:

      【解决方案2】:
      SELECT filmname
      FROM film NATURAL JOIN film_category
      WHERE category_id = 3
      

      【讨论】:

      • NATURAL JOIN 是 ANSI-92 连接语法中最糟糕的事情。
      • 我通常同意。但是,我永远不会在film 中有film_id。鉴于数据库的设置,这是最自然的编写方式。 (对不起双关语。)
      • @Y.Shoham: This 就是原因。
      • @OMGPonies:即使在外键中,前缀也不一定是表名。举一个不简单的例子,在people (id, first_name, last_name, father_id, mother_id, city_id)cities (id, name, mayor_id) - 一切是什么仍然很清楚。 cities.name 是城市的名称。 people.mother_id会让你通过她id找到妈妈。
      • 谁说前缀必须是表名?同样对于您的命名约定以及您如何解释我所说的话。使用表别名时,您永远不会看到 CITIES.name - 更像是 c.name。再次 - 什么名字?第一,最后还是中间?我了解您的信念根深蒂固,但您可能不想再忽视相关细节,例如第三方、受人尊敬的设计测试以及其他事实。
      猜你喜欢
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 2013-12-25
      相关资源
      最近更新 更多