由于某种原因在 SQL 开发人员中缺少逗号错误。之前工作正常

时间:2021-08-01 17:54:57

标签: sql oracle

我让它去做其他事情,之前它工作得很好。现在它甚至不会因为缺少逗号错误而运行,即使逗号已经存在

const getJson = (url) => fetch(url).then(res => res.json());

Promise.all([
  getJson("https://jsonplaceholder.typicode.com/users/1"),
  getJson("https://jsonplaceholder.typicode.com/todos/1")
]).then((res) => {
  console.log("Both are done!")
  console.log(res[0]);
  console.log(res[1]);
});

1 个答案:

答案 0 :(得分:1)

不是缺少逗号,而是第一个插入语句中的整个日期值是错误的。

这个:'1999-AUG-31 没有,甚至不是一个字符串(缺少尾随单引号)。但是,它也不是有效的日期值。将它与包含日期文字的第二条语句进行比较:DATE '1999-08-31'(是的,这也是你应该在第一条语句中做的)。

修复后:

SQL> INSERT INTO employees (EMPLOYEE_ID, LAST_NAME, EMAIL, HIRE_DATE, JOB_ID, DEPARTMENT_ID)
  2  VALUES(176, 'Taylor', 'jasontaylor@gmail.com', DATE '1999-08-31', 'SA_REP', 80);
                                                    -----------------
1 row created.                                      this was wrong

SQL> INSERT INTO employees (EMPLOYEE_ID, LAST_NAME, EMAIL, HIRE_DATE, JOB_ID, DEPARTMENT_ID)
  2  VALUES(200, 'Whalen', 'justinwhalen@gmail.com', DATE '1993-06-18', 'AD_ASST', 200);

1 row created.

SQL>

关于您的自然连接问题:自然连接隐式连接两个表中的公共列(它们具有相同的名称)。

这意味着您的查询:

SQL> SELECT LAST_NAME, DEPARTMENT_ID, END_DATE, JOB_ID, EMPLOYEE_ID  FROM employees NATURAL JOIN job_history;

LAST_NAME                 DEPARTMENT_ID END_DATE   JOB_ID     EMPLOYEE_ID
------------------------- ------------- ---------- ---------- -----------
Taylor                               80 06-12-0031 SA_REP             176

返回与内连接相同的结果,加入公共列:

SQL> select e.last_name, e.department_id, h.end_Date, e.job_id, e.employee_id
  2  from employees e join job_history h on h.employee_id   = e.employee_id
  3                                     and h.job_id        = e.job_id
  4                                     and h.department_id = e.department_id;

LAST_NAME                 DEPARTMENT_ID END_DATE   JOB_ID     EMPLOYEE_ID
------------------------- ------------- ---------- ---------- -----------
Taylor                               80 06-12-0031 SA_REP             176

SQL>

如果您希望查询返回“更多”行,那么它们应该在这些公共列中具有匹配的数据。例如,尽管 EMPLOYEE_ID 值匹配,但 AD_ASST 表中没有 job_history 作业值,也没有值为 department_id200


需要返回两个员工的数据:删除员工200,修改后的职位和部门数据重新录入;那么你的 NATURAL JOIN 就起作用了。

SQL> delete from job_history where employee_id = 200;

1 row deleted.

SQL> INSERT INTO job_history (EMPLOYEE_ID, START_DATE, END_DATE, JOB_ID, DEPARTMENT_ID)
  2  VALUES(200, '2001-JAN-14', '2001-JUN-17', 'AD_ASST', 200);

1 row created.

SQL> SELECT LAST_NAME, DEPARTMENT_ID, END_DATE, JOB_ID, EMPLOYEE_ID  FROM employees NATURAL JOIN job_history;

LAST_NAME                 DEPARTMENT_ID END_DATE    JOB_ID     EMPLOYEE_ID
------------------------- ------------- ----------- ---------- -----------
Taylor                               80 0031-DEC-06 SA_REP             176
Whalen                              200 2001-JUN-17 AD_ASST            200