A表:总表 fk(id,name)
B表:任务表, t(id,name,fk_id)
C表:任务详细表,d(id,p_id,t_id,name)D表:结点表 p(id,name,desc)A到B 一对多,
B到C 一对多
D到C 一对多。
我要查出 还有结点 未被包含进任务的总表中的记录。
比如我:A表建一个记录,id,name我要选出A中的name,它的C 表中的p_id没有全包含 D表的所有id.不知表述清楚了没
解决方案 »
- mysql 的存储过程把列名作为变量为什么老是有问题?求解 附上代码及图:
- 帮我看下这条sql还有优化的可能吗?
- 急。。。在线等,请教Mysql 的old_password 密码加密问题,谢谢!!!
- 触发器中STRCMP函数问题
- mysql5.5 1.备份数据库或表。2.备份为.sql文件
- Mysql修改默认编码问题
- mysql安装在linux中,现在想改变数据库存放的路径,该怎么做?
- 在REDHAT 8下配置MYSQL时出现的问题.
- mysqlcheck 使用出现-bash:mysqlcheck:command not found
- mysqld_multi centos6.9 无法自启动求助
- msyql创建表,插入数据提示不存在~
- mysql存储过程数据引起的死循环如何定位
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
where t1.id=t2.fk_id and t3.t_id=t2.id
and t3.p_id not in(select id from d)
group by t1.name;
create table D(id int primary key,name varchar(50));create table C(id int primary key,b_id int, d_id int, foreign key(d_id) references D(id),foreign key(b_id) references B(id));insert into A values(1,'第一次');
insert into A values(2,'第二次');insert into B values(1,2); 两次任务都关联:第二次
insert into B values(2,2);
insert into B values(3,1);
insert into D values(1,'中山一号');
insert into D values(2,'中山二号');insert into C values(1,2,1); 任务详细都把D中的点都关联,
insert into C values(2,1,2);
insert into C values(3,3,1);我要得到结果:
name
------
第一次我要选出A中的name,它的C 表中的d_id没有全包含 D表的所有id.
-> select a.id,count(c.d_id) n,a.name
-> from A a,B b,C c
-> where a.id=b.a_id and b.id = c.b_id group by a.id)t,
->
-> (select count(*) m from D) n
-> where t.n!=n.m;
+----+-------------+------------+--------+---------------+---------+---------+-------------+------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+---------------+---------+---------+-------------+------+---------------------------------+
| 1 | PRIMARY | <derived3> | system | NULL | NULL | NULL | NULL | 1 | |
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 2 | Using where |
| 3 | DERIVED | D | index | NULL | PRIMARY | 4 | NULL | 2 | Using index |
| 2 | DERIVED | c | ALL | b_id | NULL | NULL | NULL | 3 | Using temporary; Using filesort |
| 2 | DERIVED | b | eq_ref | PRIMARY,a_id | PRIMARY | 4 | test.c.b_id | 1 | |
| 2 | DERIVED | a | eq_ref | PRIMARY | PRIMARY | 4 | test.b.a_id | 1 | |
+----+-------------+------------+--------+---------------+---------+---------+-------------+------+---------------------------------+
6 rows in set (0.00 sec)这样的执行计划好不好哟?
有什么可以改进的?