【问题标题】:Selecting data from three tables从三个表中选择数据
【发布时间】:2013-10-25 17:34:26
【问题描述】:

目前,我已设法连接两个表以检索所需的信息。 我现在决定尝试从另一个表( users.user_id )中检索另一条信息,但我尝试使用的查询似乎不起作用。如果有人可以帮助查询,那就太好了。

这是我当前运行良好的查询。

     "SELECT films.movie_title, films.rating, films.actor, reviewed.review
      FROM films
      INNER JOIN reviewed
      ON films.movie_id=reviewed.movie_id";

这是用于从三个表中获取数据但不起作用的查询

    "SELECT films.movie_title, films.rating, films.actor, reviewed.review users.name
      FROM films
      OUTER JOIN reviewed, users
      ON films.movie_id=reviewed.movie_id && films.user_id=users.user_id";

数据库:film

films的表结构

CREATE TABLE IF NOT EXISTS `films` (
   `movie_id` int(4) NOT NULL AUTO_INCREMENT,
   `movie_title` varchar(100) NOT NULL,
   `actor` varchar(100) NOT NULL,
   `rating` varchar(20) NOT NULL,
   `user_id` int(100) NOT NULL,
    PRIMARY KEY (`movie_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;


 INSERT INTO `films` (`movie_id`, `movie_title`, `actor`, `rating`, `user_id`) VALUES
  (1, 'batman', 'christian bale', 'Excellent', 3),
  (2, 'Bne', 'reee', 'Ok', 3),
  (3, 'Today', 'dd', 'Fair', 3);

reviewed的表结构

 CREATE TABLE IF NOT EXISTS `reviewed` (
   `review_id` int(4) NOT NULL AUTO_INCREMENT,
   `review` mediumtext NOT NULL,
   `movie_id` int(4) NOT NULL,
   PRIMARY KEY (`review_id`),
   KEY `movie_id` (`movie_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;



 INSERT INTO `reviewed` (`review_id`, `review`, `movie_id`) VALUES
 (1, 'Wicked film', 1),
 (2, 'gedtg', 2),
 (3, 'dddd', 3);

users的表结构

 CREATE TABLE IF NOT EXISTS `users` (
  `user_id` int(4) NOT NULL AUTO_INCREMENT,
  `email` varchar(40) NOT NULL,
  `password` varchar(40) NOT NULL,
  `name` varchar(30) NOT NULL,
   PRIMARY KEY (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=30 ;



INSERT INTO `users` (`user_id`, `email`, `password`, `name`) VALUES
 (1, 'ben@talktalk.net', 'password', 'Ben'),
 (2, 'richard@talk.net', '1', 'richard'),

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    试试这个:

    SELECT films.movie_title, films.rating, films.actor, reviewed.review, users.name
      FROM films
      LEFT JOIN reviewed ON films.movie_id=reviewed.movie_id
      LEFT JOIN users ON films.user_id=users.user_id
    

    【讨论】:

    • 该查询出现此错误 -: **Could not execute mysqlYou have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“OUTER JOIN 审查 ONfilms.movi​​e_id=reviewed.movi​​e_id OUTER JOIN us”附近使用正确的语法**
    【解决方案2】:

    您是否可能希望在评论表中包含 user_id? 这样,您将拥有以下内容:

    1. 电影表;每部电影只有一个
    2. 用户表;每个用户只有一个
    3. 评论表;每条评论一个链接到用户和电影

    评论表现在将包含评分、评论本身、用户 ID、电影 ID 和唯一的评论 ID。

    这样一来,蝙蝠侠可以在不重复电影行的情况下获得我的优秀评级和你的平均评级。

    要修复上述查询,您可以使用以下内容:

    SELECT films.movie_title, films.rating, films.actor, reviewed.review, users.name FROM films, reviewed, users WHERE films.movie_id = reviewed.movie_id AND films.user_id = users.user_id;
    

    【讨论】:

      【解决方案3】:

      如果您只想打印带有评论的影片,则不需要 OUTER JOIN。

      SELECT films.movie_title, films.rating, films.actor, reviewed.review users.name
      FROM films JOIN reviewed on films.movie_id=reviewed.movie_id
      JOIN users ON films.user_id=users.user_id;
      

      如果要打印所有影片,即使是评论为 0 的影片,也必须使用 LEFT JOIN(MySQL 没有 FULL OUTER JOIN)。

      SELECT films.movie_title, films.rating, films.actor, reviewed.review users.name
      FROM films LEFT JOIN reviewed on films.movie_id=reviewed.movie_id
      LEFT JOIN users ON films.user_id=users.user_id;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多