sql一个文章对应多分类,查询同属某两个分类的文章的sql

你好今天晴天 发布于 2016/01/26 09:19
阅读 634
收藏 0

两个表,一个文章表,

CREATE TABLE `case` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

一个分类表,一个文章可以属于多个分类

CREATE TABLE `class` (
  `cid` bigint(20) NOT NULL DEFAULT 0,
  `oid` bigint(255) NOT NULL DEFAULT 0,
  PRIMARY KEY (`cid`,`oid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;



class.cid=case.id

求查询class.oid既等于2,又等于5的结果sql,按照图片的数值查询,应该查询出的结果为cid=2。

不知道表达清楚没




加载中
0
1
1505412718
先把等于2的查出来,再在这个结果里找等于5的
1
1505412718
@城东郭富城 不好意思,说错了,把等于2和5的分别找出来再 inner join
你好今天晴天
你好今天晴天
oid =2的里面就没有等于5的啦
0
mark35
mark35
class.id 是自增长,怎么会有重复值?  class.oid怎么又是varchar类型?
你好今天晴天
你好今天晴天
不好意思,表是临时建的,搞错了,已改正
0
maradona
maradona
select * from case where exists(select 1 from class where cid = id and oid = 2) and exists(select 1 from class where cid = id and oid = 5
0
你好今天晴天
你好今天晴天

引用来自“maradona”的评论

select * from case where exists(select 1 from class where cid = id and oid = 2) and exists(select 1 from class where cid = id and oid = 5
谢兄弟,就用你这样解决的
0
lyle_luo
lyle_luo
用union all也可以
mark35
mark35
回复 @lyle_luo : 很遗憾,mysql不支持INTERSECT、EXCEPT等结果集操作
lyle_luo
lyle_luo
@城东郭富城 选两个条件的并集呀,可以的
你好今天晴天
你好今天晴天
不可以吧,要同时满足两个条件才被选到
0
mark35
mark35

对于 pgsql可以

SELECT c.* FROM case c
 INNER JOIN 
 (
  SELECT cid FROM class WHERE oid = 2 INTERSECT
   SELECT cid FROM class WHERE oid = 5  
 ) t ON t.cid = c.id



mysql不支持交集操作,就只能用效率低的办法了







返回顶部
顶部