0

これが私が実行しようとしているクエリです。これは機能していましたが、理由がわかりません。

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

テーブルを調べているときに、これに出くわしました。これが問題かもしれないと考えてください。

ALTER TABLE `reviewed`
  ADD CONSTRAINT `reviewed_ibfk_1` FOREIGN KEY (`movie_id`) REFERENCES `films` (`movie_id`),
  ADD CONSTRAINT `reviewed_ibfk_2` FOREIGN KEY (`movie_id`) REFERENCES `films` (`movie_id`) ON DELETE CASCADE;

--
-- Table structure for table `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,
  PRIMARY KEY (`movie_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ;

--
-- Dumping data for table `films`
--

INSERT INTO `films` (`movie_id`, `movie_title`, `actor`, `rating`) VALUES
(22, 'Batman Begins', 'Bale', 'Good');

-- --------------------------------------------------------

--
-- Table structure for table `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=2 ;

--
-- Dumping data for table `reviewed`
--

INSERT INTO `reviewed` (`review_id`, `review`, `movie_id`) VALUES
(1, 'Really good film.', 22);

--
ALTER TABLE `reviewed`
  ADD CONSTRAINT `reviewed_ibfk_1` FOREIGN KEY (`movie_id`) REFERENCES `films` (`movie_id`),
  ADD CONSTRAINT `reviewed_ibfk_2` FOREIGN KEY (`movie_id`) REFERENCES `films` (`movie_id`) ON DELETE CASCADE;
4

2 に答える 2

0

@andrewsi が言及しているように、ON 句が正しくないようです。映画の ID をレビューの ID に一致させようとしていますが、これが正しいとは限りません。INNER JOIN が ON 句から正しく一致しない場合、通常は結果が得られません。

このクエリを試してください:

SELECT films.movie_title, films.rating, films.actor, reviewed.review
FROM films
INNER JOIN reviewed
    ON films.movie_id=reviewed.movie_id
于 2013-09-25T19:52:00.117 に答える