【问题标题】:JOIN FOUR TABLES in mysql. Error in syntax在 mysql 中加入四个表。语法错误
【发布时间】:2015-09-19 07:24:38
【问题描述】:

我需要在mysql中加入四个表。

我的数据库结构:

DROP DATABASE IF EXISTS db_applicant;

CREATE DATABASE db_applicant
  DEFAULT CHARACTER SET 'utf8'
  DEFAULT COLLATE 'utf8_unicode_ci';

USE db_applicant;

--
-- TABLE: PROFESSION
--
CREATE TABLE PROFESSION (
  PROFESSION_ID   INT         NOT NULL AUTO_INCREMENT,
  PROFESSION_NAME VARCHAR(50) NOT NULL,
  PRIMARY KEY (PROFESSION_ID)
);

--
-- TABLE: SUBJECT
--
CREATE TABLE SUBJECT (
  SUBJECT_ID   INT         NOT NULL AUTO_INCREMENT,
  SUBJECT_NAME VARCHAR(50) NOT NULL,
  PRIMARY KEY (SUBJECT_ID)
);

--
-- TABLE: APPLICANT
--
CREATE TABLE APPLICANT (
  APPLICANT_ID  INT         NOT NULL AUTO_INCREMENT,
  PROFESSION_ID INT         NOT NULL,
  LAST_NAME     VARCHAR(30) NOT NULL,
  FIRST_NAME    VARCHAR(30) NOT NULL,
  ENTRANCE_YEAR INT         NOT NULL,
  PRIMARY KEY (APPLICANT_ID),
  FOREIGN KEY (PROFESSION_ID) REFERENCES PROFESSION (PROFESSION_ID)
);

--
-- TABLE: APPLICANT_RESULT
--
CREATE TABLE APPLICANT_RESULT (
  APPLICANT_RESULT_ID INT NOT NULL AUTO_INCREMENT,
  APPLICANT_ID        INT NOT NULL,
  SUBJECT_ID          INT NOT NULL,
  MARK                INT,
  PRIMARY KEY (APPLICANT_RESULT_ID),
  FOREIGN KEY (SUBJECT_ID)
  REFERENCES SUBJECT (SUBJECT_ID),
  FOREIGN KEY (APPLICANT_ID)
  REFERENCES APPLICANT (APPLICANT_ID)
);


--
-- TABLE: SPECIALITY_SUBJECT
--
CREATE TABLE SPECIALITY_SUBJECT (
  SP_SB_ID      INT NOT NULL AUTO_INCREMENT,
  PROFESSION_ID INT NOT NULL,
  SUBJECT_ID    INT NOT NULL,
  PRIMARY KEY (SP_SB_ID),
  FOREIGN KEY (PROFESSION_ID)
  REFERENCES PROFESSION (PROFESSION_ID),
  FOREIGN KEY (PROFESSION_ID)
  REFERENCES PROFESSION (PROFESSION_ID),
  FOREIGN KEY (SUBJECT_ID)
  REFERENCES SUBJECT (SUBJECT_ID)
);

我需要这样的输出:

first_name(申请表中的这一列),last_name(申请表中的这一列),entry_year(申请表中的这一列),professional_name(表中的这一列),subject_name(表中的这一列),mark (此列来自表申请者_结果)。

你可以看到,我有相关的领域。但我需要强大的内部查询。 为此,我创建了具有结构的新表:

CREATE TABLE APP(
  ALL_ID              INT NOT NULL AUTO_INCREMENT,
  APPLICANT_ID        INT NOT NULL,
  SUBJECT_ID          INT NOT NULL,
  PROFESSION_ID       INT NOT NULL,
  APPLICANT_RESULT_ID INT NOT NULL,
  PRIMARY KEY (ALL_ID),
  FOREIGN KEY (SUBJECT_ID)
  REFERENCES SUBJECT (SUBJECT_ID),
  FOREIGN KEY (APPLICANT_ID)
  REFERENCES APPLICANT (APPLICANT_ID),
  FOREIGN KEY (PROFESSION_ID)
  REFERENCES PROFESSION (PROFESSION_ID),
  FOREIGN KEY (APPLICANT_RESULT_ID)
  REFERENCES APPLICANT_RESULT (APPLICANT_RESULT_ID)
);

还有我的内心:

SELECT ap.ALL_ID, a.FIRST_NAME, a.LAST_NAME,
       a.ENTRANCE_YEAR, p.PROFESSION_NAME s.SUBJECT_NAME, ar.MARK
FROM app ap
JOIN (applicant a, profession p, subject s, applicant_result ar)
 ON ap.APPLICANT_ID = a.APPLICANT_ID
AND ap.SUBJECT_ID = s.SUBJECT_ID
AND ap.PROFESSION_ID = p.PROFESSION_ID
AND ap.APPLICANT_RESULT_ID = ar.APPLICANT_RESULT_ID;

但我有错误:

[2015-09-19 10:08:52] [42000][1064] 你的 SQL 有错误 句法;检查与您的 MySQL 服务器版本相对应的手册 在 '.SUBJECT_NAME, ar.MARK FROM app ap 附近使用正确的语法 JOIN(申请人 a,职业 p,学科 s,a' 在第 1 行

【问题讨论】:

  • 你少了一个逗号。

标签: mysql sql join


【解决方案1】:

您不认为,在 s.SUBJECT_NAME 之前的 select 语句中这里缺少逗号“,”吗?

SELECT ap.ALL_ID, a.FIRST_NAME, a.LAST_NAME,
       a.ENTRANCE_YEAR, p.PROFESSION_NAME s.SUBJECT_NAME, ar.MARK

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-26
    • 2018-07-08
    • 2014-07-19
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    相关资源
    最近更新 更多