mysql - 在 mysql 中连接四个表。语法错误

标签 mysql sql join

我需要在 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(此列来自 applicant 表),last_name(此列来自 applicant 表),entrance_year(此列来自 applicant 表),profession_name(此列来自表 profession),subject_name(此列来自表 subject),mark (此列来自表 applicant_result)。

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

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] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.SUBJECT_NAME, ar.MARK FROM app ap JOIN (applicant a, profession p, subject s, a' at line 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

关于mysql - 在 mysql 中连接四个表。语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32665514/

相关文章:

mysql select查询无法获取空值数据

php - PHP连接到MySQL的连接数上限是多少?

php - MySqlaffected_rows始终为0但UPDATE有效

mysql - 一口气修复所有 table

sql - pl/sql 'Function' 中的异常 block 未捕获错误条件

mysql - SQL 查询 - 两个多对一关系的表(规范化问题)

javascript - Nodejs Mysql回调中的回调

php - CakePHP 3.0 中 add 方法中将附加数据保存到 Join 表

mysql - 使用sql查询获取结果

mysql - 需要帮助使用 "not in"连接优化 MySQL 查询