带有可选左连接的MySQL查询

时间:2015-02-24 08:03:10

标签: mysql

我有以下数据库关系:

用户 1:n 调查 1:n 声明 1:n user_response n:1 用户

我需要查询与user_response没有关系的所有语句,或者给定用户的字段user_response.closed = 1,以及给定的statement-id。

我真的不明白......

修改

这是我的数据库的导出。例如,我有一个survey-id 1和user-id 1.我需要调查的所有陈述,其中id为1,不具有id为1的用户的响应,或者其响应为用户未关闭。

所以我的结果应该是声明1' (因为user_response.closed = 0)和' Statement 2' (因为id为1的用户没有给出回复)。

CREATE TABLE IF NOT EXISTS `statement` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(64) NOT NULL,
  `survey_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `2` (`survey_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `statement` (`id`, `title`, `survey_id`) VALUES
(1, 'Statement 1', 1),
(2, 'Statement 2', 1),
(3, 'Statement 1', 2),
(4, 'Statement 1', 3);

CREATE TABLE IF NOT EXISTS `survey` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(64) NOT NULL,
  `user_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `1` (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

INSERT INTO `survey` (`id`, `title`, `user_id`) VALUES
(1, 'Survey 1', 1),
(2, 'Survey 2', 1),
(3, 'Survey 3', 2);

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

INSERT INTO `user` (`id`, `name`) VALUES
(1, 'Max'),
(2, 'Peter');

CREATE TABLE IF NOT EXISTS `user_response` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `value` int(3) NOT NULL,
  `closed` tinyint(1) NOT NULL,
  `statement_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `3` (`statement_id`),
  KEY `4` (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

INSERT INTO `user_response` (`id`, `value`, `closed`, `statement_id`, `user_id`) VALUES
(1, 50, 0, 1, 1),
(2, 20, 0, 4, 2);

ALTER TABLE `statement`
  ADD CONSTRAINT `2` FOREIGN KEY (`survey_id`) REFERENCES `survey` (`id`),
  ADD CONSTRAINT `FK_BBA66ED9A94F7BC` FOREIGN KEY (`survey_id`) REFERENCES `survey` (`id`);

ALTER TABLE `survey`
  ADD CONSTRAINT `1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
  ADD CONSTRAINT `FK_AD5F9BFC9395C3F3` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`);

ALTER TABLE `user_response`
  ADD CONSTRAINT `3` FOREIGN KEY (`statement_id`) REFERENCES `statement` (`id`),
  ADD CONSTRAINT `4` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`);

0 个答案:

没有答案