sql – 选择具有匹配标志的全部项目
发布时间:2021-04-02 02:08:43 所属栏目:编程 来源:网络整理
导读:我正试图找到最有用的要领来办理这个题目,但我必需汇报你,我已经搞砸了它.环视附近,没有发明任何相干性,以是在这里. 怎样选择与所需项目具有相似标签的全部项目? 以此表为例: (用于从头建设表格的sql代码) project 1 - tagA | tagB | tagCproject 2 - tagA
SQL代码复制/粘贴和参差不齐. CREATE TABLE IF NOT EXISTS `projects` ( `num` int(2) NOT NULL auto_increment,`title` varchar(30) NOT NULL,PRIMARY KEY (`num`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; INSERT INTO `projects` (`num`,`title`) VALUES(1,'project 1'),(2,'project 2'),(3,'project 3'),(4,'project 4'); CREATE TABLE IF NOT EXISTS `projects_to_tags` ( `project_id` int(2) NOT NULL,`tag_id` int(2) NOT NULL,KEY `project_id` (`project_id`,`tag_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `projects_to_tags` (`project_id`,`tag_id`) VALUES(1,1),(1,2),3),3); CREATE TABLE IF NOT EXISTS `tags` ( `tag_id` int(2) NOT NULL auto_increment,`tag` varchar(30) NOT NULL,PRIMARY KEY (`tag_id`),UNIQUE KEY `tag` (`tag`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; INSERT INTO `tags` (`tag_id`,`tag`) VALUES(1,'tag a'),'tag b'),'tag c'); 办理要领在以下任何一种环境下,假如您不知道PROJECT.num / PROJECT_TO_TAGS.project_id,则必需插手PROJECTS表以获取id值以找出它关联的标志.行使IN SELECT p.* FROM PROJECTS p JOIN PROJECTS_TO_TAGS pt ON pt.project_id = p.num WHERE pt.tag_id IN (SELECT x.tag_id FROM PROJECTS_TO_TAGS x WHERE x.project_id = 4) 行使EXISTS SELECT p.* FROM PROJECTS p JOIN PROJECTS_TO_TAGS pt ON pt.project_id = p.num WHERE EXISTS (SELECT NULL FROM PROJECTS_TO_TAGS x WHERE x.project_id = 4 AND x.tag_id = pt.tag_id) 行使JOINS(这是最有用的!) DISTINCT是须要的,由于JOIN会冒功效齐集呈现一再数据的风险…… SELECT DISTINCT p.* FROM PROJECTS p JOIN PROJECTS_TO_TAGS pt ON pt.project_id = p.num JOIN PROJECTS_TO_TAGS x ON x.tag_id = pt.tag_id AND x.project_id = 4 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读