【问题标题】:How can I get this query to work?我怎样才能让这个查询工作?
【发布时间】:2018-04-27 22:54:25
【问题描述】:

查询要求找到课程集,它们的组合涵盖了一个人追求 pos_code 所缺少的所有知识/技能。所考虑的课程集将不包括超过三门课程。如果找到多个课程集,则按课程的升序排列课程集(及其课程 ID) 课程集的总成本。

我正在尝试编写的查询如下,但在 SQL Developer 中引发了错误。 SQL 错误:ORA-01747:无效的 user.table.column、table.column 或列规范。这是什么原因?

SELECT c.c_code, c.title, c.level, c.description, k.ks_code, SUM(c.retail_price)
FROM course c 
INNER JOIN knowledge k 
ON c.c_code = k.c_code 
INNER JOIN requires r 
ON r.ks_code = k.ks_code
WHERE pos_code = 1
GROUP BY c.c_code, c.title, c.level, c.description, k.ks_code
ORDER BY c.retail_price;

使用的表是

CREATE TABLE course(
    c_code VARCHAR(8),
    title VARCHAR(80),
    c_level VARCHAR(20) CHECK(c_level = 'beginner' OR c_level = 'intermediate' OR c_level = 'advanced'),
    description VARCHAR(300),
    status VARCHAR(6) CHECK(status = 'expired' OR status = 'active'),
    retail_price NUMERIC(8,2) CHECK (retail_price > 0),
    PRIMARY KEY(c_code)
);

CREATE TABLE knowledge(
    ks_code VARCHAR(8),
    ks_title VARCHAR(50) NOT NULL,
    ks_description VARCHAR(300),
    ks_level VARCHAR(15) CHECK(ks_level = 'beginner' OR ks_level = 'intermediate' OR ks_level = 'advanced'),
    PRIMARY KEY(ks_code)
);

CREATE TABLE requires(
    pos_code VARCHAR(8),
    ks_code VARCHAR(8),
    PRIMARY KEY(pos_code, ks_code),
    FOREIGN KEY(pos_code) REFERENCES position ON DELETE CASCADE,
    FOREIGN KEY(ks_code) REFERENCES knowledge ON DELETE CASCADE
);

CREATE TABLE teaches(
    c_code VARCHAR(8),
    ks_code VARCHAR(8),
    PRIMARY KEY(c_code, ks_code),
    FOREIGN KEY(c_code) REFERENCES course ON DELETE CASCADE,
    FOREIGN KEY(ks_code) REFERENCES knowledge ON DELETE CASCADE
);

CREATE TABLE position(
    pos_code VARCHAR(8),
    emp_mode VARCHAR(15) CHECK(emp_mode = 'full-time' OR emp_mode = 'part-time'),
    required_skill VARCHAR(30) NOT NULL,
    pay_rate NUMERIC(8,2) CHECK(pay_rate > 0),
    pay_type VARCHAR(8) CHECK(pay_type = 'wage' OR pay_type = 'salary'),
    cate_code VARCHAR(8),
    comp_id VARCHAR(8),
    PRIMARY KEY(pos_code)
);

【问题讨论】:

  • “不是真的工作”不是一个有用的描述。请通过发布示例输入数据集(表中的内容)、示例输出数据集(不工作的内容)以及您想要的内容(如何判断它正在工作)来扩展它是如何工作的
  • 什么-什么?为什么不工作?你得到一个错误,或者结果是错误的?请展示一些输入数据和预期结果的示例。
  • 抱歉不清楚。当我在 oracle sql developer 中运行此查询时,我收到错误 SQL 错误:ORA-01747: invalid user.table.column, table.column, or column specification。这是什么原因?
  • @RyanP,您还需要添加您的position 表并提供一些示例数据
  • 请阅读minimal reproducible example并采取行动。在您考虑提问之前,请在 Google 上搜索答案(包括错误消息)。

标签: sql database oracle


【解决方案1】:

该查询甚至没有正确构建,列引用中有很多错误被遗漏了。

现在修复了之前有错误列引用的查询!

SELECT c.c_code, c.title, c.c_level, c.description, k.ks_code, SUM(c.retail_price)
FROM course c 
INNER JOIN knowledge k 
ON c.c_code = k.ks_code 
INNER JOIN requires r 
ON r.ks_code = k.ks_code
WHERE r.pos_code = 1
GROUP BY c.c_code, c.title, c.c_level, c.description, k.ks_code, c.retail_price
ORDER BY c.retail_price;

你还需要检查以下几点:

  • 您需要检查您要引用哪个pos_code。是来自requires 还是position
  • 对数据运行此查询,我刚刚检查了要执行的查询!

【讨论】:

    【解决方案2】:

    表格课程没有列级,表格知识没有列c_code

    【讨论】:

    • 所以要真正修复这个错误,我已经更正了不匹配的列名,但是对于知识表中的c_code,在其中添加一个c_code是否有意义?我在上面添加了另一个表格,看起来更合适。
    • 是的,看起来课程和知识之间的联系就是教师表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多