请教一条mysql的sql语句怎么写 5C

表1: project
id projecName reportID
1 火电 1
2 水电 1
3 风电 1
4 火电 2
5 水电 2
6 核电 2
7 光电 1
表2:report
id time
1 2016年04月
2 2016年05月

想查出来2016年04月上报的projectName,但是05月份没有上报的
即:
id projectName

3 风电
7 光电
mysql数据库,表2的id 对应的表1 reportID
同时请教,我用的是绿色版的mysql32位的,project和report表都有大量数据的时候,执行查询的时候没有反应是为什么?

10个回答

 SELECT * FROM project 
    WHERE reportID IN (SELECT id FROM report WHERE time = '2016年04月') 
    AND projecName NOT IN (SELECT projecName FROM project WHERE reportID IN (SELECT id FROM report WHERE time = '2016年05月') )
zhangjundns
zhangjundns 回复潇湘欲雨: 在time 和 projecName 两个字段上加索引可以提高查询效率
4 年多之前 回复
antigone
潇湘欲雨 是的 我用的是Navicat for MySQL这个工具,执行的时候没有反应,也不报错,也没有结果,过一会儿就提示数据库连接断开了。数据量大概12个月,每个月project5000条,report表37条
4 年多之前 回复
liummmin
minge0001 回复antigone: 数据库没反应,不至于吧
4 年多之前 回复
antigone
潇湘欲雨 这个虽然能查出来,但是在大数据的时候,数据库就没反应了,我用的是32位的mysql,每月的数据大概5000条,总共1万条
4 年多之前 回复

select * from project where projecName not exist(select projecName from project where reportID=2)

antigone
潇湘欲雨 本身并不知道reportID,要用时间检索
4 年多之前 回复

从表里看出来,表1的reportID=表2的id所以根据这个关联可以写出来
sql=select 表1.id from 表1,表2 where 表1.reportID=表2.id AND 表2.id=1

antigone
潇湘欲雨 从时间查询,id什么的是看不到的
4 年多之前 回复

select projecName from project where reportID =(select id from report where time=' 2016年04月')

创建表字段名的时候要注意,有些是 数据库关键字,最好不要用

yangkalaok
Tarzan_ select * from project where reportID = (select id from report where time='2016年04月') and reportID <>(select id from report where time='2016年05月')
4 年多之前 回复
antigone
潇湘欲雨 我要两个月作比较,4月上报但是5月没有上报的数据
4 年多之前 回复

select a.id,a.projectName from project a
left join report b on b.id = a.reportID
where b.time = '2016年04月'
and a.projectName not in (
select a.projectName from project a
left join report b on b.id = a.reportID
where b.time = '2016年05月'
)

antigone
潇湘欲雨 这个虽然能查出来,但是在大数据的时候,数据库就没反应了,我用的是32位的mysql,每月的数据大概5000条,总共1万条
4 年多之前 回复

SELECT * FROM(SELECT * FROM project WHERE time = 201604 )as p1 LEFT JOIN ( SELECT * FROM project WHERE time = 201605 ) as p2 on p1.projecName=p2.projecName WHERE p2.projecName IS NULL

antigone
潇湘欲雨 project里面没有time列,time列在report表里面
4 年多之前 回复

select * from project where reportID=(select id from report where time='2016年04月') not exist(select * from project where reportID=(select id from report where time='2016年05月'))

antigone
潇湘欲雨 报错[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'exist(select * from project where reportID=(select id from report where time='20' at line 1
4 年多之前 回复

select * from project where reportID = (select id from report where time='2016年04月')
and projecName not in(
select projecName from project where reportID = (select id from report where time='2016年05月')
)

zhangjundns
zhangjundns 回复潇湘欲雨: 加个分页
4 年多之前 回复
antigone
潇湘欲雨 这个虽然能查出来,但是在大数据的时候,数据库就没反应了,我用的是32位的mysql,每月的数据大概5000条,总共1万条
4 年多之前 回复

select * from project where reportID = (select id from report where time='2016年04月') and reportID <>(select id from report where time='2016年05月')
试试

qq_17486399
车联网_咸鱼 你可以试试用except
4 年多之前 回复
qq_17486399
车联网_咸鱼 哦哦,是不对,在这里后面的那个判断是没有起到任何作用的。
4 年多之前 回复
antigone
潇湘欲雨 不太对,查出来4月上报的那四条
4 年多之前 回复

select projectName from project where reportID in (select id from report where time='2016年04月')

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问