Valeriu
Valeriu

Reputation: 171

JOIN FOUR TABLES in mysql. Error in syntax

I need to join four tables in mysql.

My database structure:

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)
);

I need that output would be something like:

first_name (this column from table applicant), last_name (this column from table applicant), entrance_year (this column from table applicant), profession_name (this column from table profession), subject_name (this column from table subject), mark (this column from table applicant_result).

You can see, that i have related fields. But i need strong INNER QUERY. For that, i create new table with structure:

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)
);

And my inner:

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;

But i have error:

[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

Upvotes: 1

Views: 68

Answers (1)

Nitin Tripathi
Nitin Tripathi

Reputation: 1254

Don't you think, a comma ',' is missing here in select statement before s.SUBJECT_NAME?

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

Upvotes: 4

Related Questions