Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 98407
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T00:11:24+00:00 2026-05-11T00:11:24+00:00

I have a MySQL Left Join problem. I have three tables which I’m trying

  • 0

I have a MySQL Left Join problem.

I have three tables which I’m trying to join.

A person table:

CREATE TABLE person (     id INT NOT NULL AUTO_INCREMENT,     type ENUM('student', 'staff', 'guardian') NOT NULL,     first_name CHAR(30) NOT NULL,     last_name CHAR(30) NOT NULL,     gender ENUM('m', 'f') NOT NULL,     dob VARCHAR(30) NOT NULL,     PRIMARY KEY (id) );

A student table:

CREATE TABLE student (     id INT NOT NULL AUTO_INCREMENT,     person_id INT NOT NULL,     primary_guardian INT NOT NULL,     secondary_guardian INT,     join_date VARCHAR(30) NOT NULL,       status ENUM('current', 'graduated', 'expelled', 'other') NOT NULL,     tutor_group VARCHAR(30) NOT NULL,     year_group VARCHAR(30) NOT NULL,     PRIMARY KEY (id),     FOREIGN KEY (person_id) REFERENCES person(id) ON DELETE CASCADE,     FOREIGN KEY (primary_guardian) REFERENCES guardian(id),     FOREIGN KEY (secondary_guardian) REFERENCES guardian(id),     FOREIGN KEY (tutor_group) REFERENCES tutor_group(name),     FOREIGN KEY (year_group) REFERENCES year_group(name) );

And an incident table:

CREATE TABLE incident (     id INT NOT NULL AUTO_INCREMENT,     student INT NOT NULL,     staff INT NOT NULL,     guardian INT NOT NULL,     sent_home BOOLEAN NOT NULL,     illness_type VARCHAR(255) NOT NULL,     action_taken VARCHAR(255) NOT NULL,     incident_date DATETIME NOT NULL,     PRIMARY KEY (id),     FOREIGN KEY (student) REFERENCES student(id),     FOREIGN KEY (staff) REFERENCES staff(id),     FOREIGN KEY (guardian) REFERENCES guardian(id) );

What I’m trying to select is the first name, last name and the number of incidents for each student in year 9.

Here’s my best attempt at the query:

SELECT p.first_name, p.last_name, COUNT(i.student) FROM person p, student s  LEFT JOIN incident i ON s.id = i.student  WHERE p.id = s.person_id AND s.year_group LIKE '%Year 9%';

However, it ignores any students without an incident which is not what I want – they should be displayed but with a count of 0. If I remove the left join and the count then I get all the students as I would expect.

I’ve probably misunderstood left join but I thought it was supposed to do, essentially what I’m trying to do?

Thanks for your help,

Adam

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-11T00:11:25+00:00Added an answer on May 11, 2026 at 12:11 am

    What you are doing is fine, you just missed off the group by clause

    SELECT p.first_name, p.last_name, COUNT(i.student) FROM person p, student s  LEFT JOIN incident i ON s.id = i.student  WHERE p.id = s.person_id AND s.year_group LIKE '%Year 9%' GROUP BY p.first_name, p.last_name; 

    Here’s some test data

    insert into person values(1, 'student', 'Alice', 'Foo', 'f','1970-01-01'); insert into person values(2, 'student', 'Bob', 'Bar', 'm','1970-01-01');  insert into student values(1,1,0,0,'', 'current','','Year 9'); insert into student values(2,2,0,0,'', 'current','','Year 9');  insert into incident values(1,1,0,0,0,'flu','chicken soup', '2008-01-08'); 

    And here’s the output of the query with the group by added to it:

    +------------+-----------+------------------+ | first_name | last_name | COUNT(i.student) | +------------+-----------+------------------+ | Alice      | Foo       |                1 | | Bob        | Bar       |                0 | +------------+-----------+------------------+ 

    You could further clean up the query by making join clauses from your where clause, and grouping on the person id:

    SELECT p.first_name, p.last_name, COUNT(i.student) FROM person p INNER JOIN student s ON(p.id = s.person_id) LEFT JOIN incident i ON(s.id = i.student) WHERE s.year_group LIKE '%Year 9%' GROUP BY p.id; 
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 109k
  • Answers 109k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer You're not adding any markers to the map - unless… May 11, 2026 at 9:20 pm
  • Editorial Team
    Editorial Team added an answer What you've implemented (the map-by-class approach) is one of the… May 11, 2026 at 9:20 pm
  • Editorial Team
    Editorial Team added an answer As far as I know, there is no "outerHTML" support… May 11, 2026 at 9:20 pm

Related Questions

I have a MySQL Left Join problem. I have three tables which I'm trying
I'm getting odd results from a MySQL SELECT query involving a LEFT JOIN ,
Overview: I have three tables 1) subscribers, bios, and shirtsizes and i need to
Is there a limit to the number of joins permitted in a JPA/Hibernate query?
I have the following five tables: ISP Product Connection AddOn AddOn/Product (pivot table for

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.