INSERT INTO
(SELECT employee_id, last_name,
email, hire_date, job_id, salary,
department_id
FROM employees
where department_id = 50
)
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000,50)
系唔系有d无里头,多q余的感觉, 的确。特别是那个 "where department_id = 50"
我系sybase一般都是写成下面的样子的:
INSERT INTO employees(他们之前有什么区别呢, 我测过 效果系一样的, 插入的果一条记录都系咁 如下图:
employee_id, last_name,
email, hire_date, job_id, salary,
department_id)
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000,50)
真系一沟样。。。。
但系 加入with check option 就大大不同了。
INSERT INTO这个一句能正常执行。
(SELECT employee_id, last_name,
email, hire_date, job_id, salary,
department_id
FROM employees
where department_id = 50
witch check option
)
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000,50)
但是,修改一下, 将要插入的department_id 改成60 就失败了。
INSERT INTO
(SELECT employee_id, last_name,
email, hire_date, job_id, salary,
department_id
FROM employees
where department_id = 50
with check option
)
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000,60)
因为加入with check option 不满足subquery中的where条件的话,就不允许插入.
上面的的where 条件是 department_id = 50, 而插入的值是60 所以失败了。
with check option还有另1个限制:。where条件指定的列如果不在insert的列中,也不允许插入
例如:
INSERT INTO
(SELECT employee_id, last_name,
email, hire_date, job_id, salary
FROM employees
where department_id = 50
with check option
)
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-06-1999', 'DD-MM-YYYY'),
'ST_CLERK', 5000)
也就是要保证插入的数据 要跟子查询相对应。
如果不加入with check option, 上面的语句是能执行的