环境:Linux + oracke 10.2有如下两张表:
我希望实现,一个作业只能属于一个A类型的任务。也就是说,如果A类型的任务101,它拥有编号为1作业时,那么其它A类型的任务就不能再拥有作业1了,而对于B类型的任务,就可以拥有作业1。例如:任务105不能再拥有作业1,表中有错误。而任务106则可以拥有作业1.
请教sql语句:如何编写来检测到一个作业是否属于多个A类型的任务,检测到时报错。比如:任务101非法,因为有作业1属于多个A类型的任务谢谢!任务信息表:task_info
task_id task_name task_type
101 task1 'A'
102 task2 'B'
103 task3 'A'
104 task4 'B'
105 task5 'A'
106 task6 'B'
主键:task_id
任务与作业关系表:task_job
task_id, task_name, job_id
101 task1 1
101 task1 2
101 task1 3
102 task2 4
102 task2 5
103 task3 6
104 task4 7
104 task4 8
105 task5 1
105 task5 9
105 task5 10
106 task6 1
106 task6 1
主键:taskid, job_id
任务与作业是一对多的关系
我希望实现,一个作业只能属于一个A类型的任务。也就是说,如果A类型的任务101,它拥有编号为1作业时,那么其它A类型的任务就不能再拥有作业1了,而对于B类型的任务,就可以拥有作业1。例如:任务105不能再拥有作业1,表中有错误。而任务106则可以拥有作业1.
请教sql语句:如何编写来检测到一个作业是否属于多个A类型的任务,检测到时报错。比如:任务101非法,因为有作业1属于多个A类型的任务谢谢!任务信息表:task_info
task_id task_name task_type
101 task1 'A'
102 task2 'B'
103 task3 'A'
104 task4 'B'
105 task5 'A'
106 task6 'B'
主键:task_id
任务与作业关系表:task_job
task_id, task_name, job_id
101 task1 1
101 task1 2
101 task1 3
102 task2 4
102 task2 5
103 task3 6
104 task4 7
104 task4 8
105 task5 1
105 task5 9
105 task5 10
106 task6 1
106 task6 1
主键:taskid, job_id
任务与作业是一对多的关系
解决方案 »
- oracle 11g 卸载的问题
- 那位帮帮忙,给我一个有效oracle.com.cn邀请码,多谢了
- 请oracle高手进来啊!
- 请教:FPower10什么意思?
- 再次请教一个SQL语句
- 我刚才发的帖子怎么没显示??再贴一遍把, 关于oracle没有响应的问题
- ORACLE安装问题
- Linux的SHELL文件里的一行代码 : $ORACLE_HOME/bin/svrmgrl << EOF ,具体含义详细说明一下吗?
- 请问那里有oracle的电子书籍下载(中文版)
- ORACLE查询不同设备某一时间段内焊接工件数量,查询语句怎么写?
- 求一sql语句!
- oracle 备份与恢复?????????????????????????????????????????????????
SELECT job_id
FROM task_job
WHERE task_id = 2;
if( SQLCODE != SQLSUCC && SQLCODE != SQLNOTFOUND ) {
err_log( __FILE__,__LINE__, "declare failed!" );
return _FAIL_;
} EXEC SQL OPEN con_task_check_cur;
if( SQLCODE != SQLSUCC && SQLCODE != SQLNOTFOUND ) {
err_log( __FILE__,__LINE__, "open failed!" );
return _FAIL_;
} while( 1 ) {
EXEC SQL FETCH con_task_check_cur INTO :i_job_id;
if( SQLCODE == SQLNOTFOUND )
break;printf( "ÈÎÎñ2×÷ҵΪ£ºi_job_id = [%d]\n", i_job_id );
if( SQLCODE != SQLSUCC ) {
err_log( __FILE__,__LINE__,"fetch failed![%d]", SQLCODE );
suc_flag = _FAIL_;
break;
}
EXEC SQL SELECT COUNT(*) INTO :con_task_cnt
FROM task_job T1, task_info T2
WHERE T1.job_id = :i_job_id
AND T2.task_id = T1.task_id
AND T2.task_type = 1; if( SQLCODE != SQLSUCC && SQLCODE != SQLNOTFOUND ) {
err_log( __FILE__,__LINE__, "select failed!" );
suc_flag = _FAIL_;
break;
}printf( "con_task_cnt = [%d]\n", con_task_cnt );
if( con_task_cnt != 1 ) {
memset( G_err_msg, 0x00, sizeof( G_err_msg ) );
sprintf( G_err_msg,"×÷Òµ[%d]ÊôÓÚ¶à¸öÈÕ³£Ð͵÷¶ÈÈÎÎñ", i_job_id );
suc_flag = _NO_;
break;
}
printf( "%d\n", con_task_cnt );
} if ( suc_flag == _YES_ )
strcpy( G_err_msg, "SUCC"); printf( "%s\n", G_err_msg );
return suc_flag;
select job_id,count(*) from from task_job,task_info
where task__type='A' and task_job.task_id=task_info.task_id
group by job_id
having count(*)>1
下面查询返回非法作业的个数
select count(count(*)) from from task_job,task_info
where task__type='A' and task_job.task_id=task_info.task_id
group by job_id
having count(*)>1
我忘了说一点要求,应当只需要查询给定的任务下面的所有作业是否在其它A类型的任务中有冲突。也就是说,给我一个任务ID,我查询他下面的所有作业是否合法。
你现在给我的语句可以查出所有非法的A任务,但这里面并不一定就包含了给定的那个任务。
如果已知的那个任务合法的话我可以先不管其它的。
如何把给定的任务ID作为一个条件加进上面的SQL语句呢?
谢谢!