>

3 개의 테이블이 있고 옵션이 있거나없는 모든 게시물과 함께 모든 옵션을 나열해야합니다. 실제로 수행했지만 옵션이 있지만 그렇지 않은 게시물 만 표시합니다. 옵션이 목록에 표시되지 않습니다.

sqlfiddle의 예 :http://sqlfiddle.com/#! 9/8d27dd/1

목록을 보면 ID 1의 게시물에 3 개의 옵션이 할당되어 있고 네 번째 행 값 null이 표시되고 ID 2의 게시물에 옵션이 할당되어 있지만 모든 옵션을 표시해야합니다. 테이블에있는 기존의 모든 옵션 중 null 값을 가진 다른 행 [post_options].

테이블 :

tabla[ post ]- Save all the main post

tabla[ post_options]- Save all the options of the post

tabla[ post_has_options]- Save all the post that have options

테이블 코드 :

CREATE TABLE `post` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `id_post_type` tinyint(3) unsigned NOT NULL,
  `title` varchar(255) NOT NULL,
  `create_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `modified_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `FK_title_UNIQUE` (`title`) USING BTREE,
  KEY `FK_post_post_types` (`id_post_type`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `post` VALUES ('1', '1', 'Title 1', '2018-01-27 14:58:24', '2018-01-27 23:10:00');
INSERT INTO `post` VALUES ('2', '1', 'Title 2', '2018-01-27 14:58:24', '2018-01-27 23:10:00');
INSERT INTO `post` VALUES ('3', '1', 'Title 3', '2018-01-27 14:58:24', '2018-01-27 23:10:00');
INSERT INTO `post` VALUES ('4', '1', 'Title 4', '2018-01-27 14:58:24', '2018-01-27 23:10:00');
CREATE TABLE `post_has_options` (
  `id_post` int(10) unsigned NOT NULL,
  `id_post_work_type` tinyint(3) unsigned NOT NULL,
  `create_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `modified_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_post`,`id_post_work_type`),
  KEY `id_post_work_type` (`id_post_work_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `post_has_options` VALUES ('1', '1', '2018-01-27 22:00:51', '2018-01-27 22:00:51');
INSERT INTO `post_has_options` VALUES ('1', '2', '2018-01-27 22:00:54', '2018-01-27 22:00:54');
INSERT INTO `post_has_options` VALUES ('1', '3', '2018-01-27 22:00:58', '2018-01-27 22:00:58');
INSERT INTO `post_has_options` VALUES ('2', '2', '2018-01-27 22:45:19', '2018-01-27 22:45:19');
CREATE TABLE `post_options` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `create_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `modified_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `FK_name_UNIQUE` (`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `post_options` VALUES ('1', 'Work type 1', '2018-01-27 14:59:30', '2018-01-27 14:59:30');
INSERT INTO `post_options` VALUES ('2', 'Work type 2', '2018-01-27 14:59:30', '2018-01-27 14:59:30');
INSERT INTO `post_options` VALUES ('3', 'Work type 3', '2018-01-27 14:59:30', '2018-01-27 14:59:30');
INSERT INTO `post_options` VALUES ('4', 'Work type 4', '2018-01-27 14:59:30', '2018-01-27 14:59:30');

쿼리 :

SELECT *
FROM post_options P
LEFT JOIN post_has_options PHO ON PHO.id_post_work_type = P.id

도움을 주셔서 감사합니다.

  • 답변 # 1

    이것이 당신이 원하는 것이라고 생각합니다 :

    SELECT 
        *
    FROM 
        post AS p
    LEFT OUTER JOIN 
        post_has_options AS pho
        ON 
        p.id = pho.id_post
    LEFT OUTER JOIN
        post_options AS po
        ON
        po.id = pho.id_post_work_type
    
    

    그렇지 않다면 다른 점을 알려 주시면 답변을 수정하겠습니다. 이것이 필요한 것이라면 답변으로 표시해야 사람들이 더 이상 도움이 필요하지 않다는 것을 사람들이 알게됩니다.

관련 자료

  • 이전 javascript - 사용자가 이미지를 다시 업로드 할 때 이미지의 src가 변경되지 않습니다 (socketio)
  • 다음 Azure 기능 콜드 시작 시간을 측정하는 방법