FAQ: What Are Database Relationships? - Many-to-Many Relationship Part 2

This community-built FAQ covers the “Many-to-Many Relationship Part 2” exercise from the lesson “What Are Database Relationships?”.

Paths and Courses
This exercise can be found in the following Codecademy content:

Design Databases With PostgreSQL

FAQs on the exercise Many-to-Many Relationship Part 2

There are currently no frequently asked questions associated with this exercise – that’s where you come in! You can contribute to this section by offering your own questions, answers, or clarifications on this exercise. Ask or answer a question by clicking reply (reply) below.

If you’ve had an “aha” moment about the concepts, formatting, syntax, or anything else with this exercise, consider sharing those insights! Teaching others and answering their questions is one of the best ways to learn and stay sharp.

Join the Discussion. Help a fellow learner on their journey.

Ask or answer a question about this exercise by clicking reply (reply) below!
You can also find further discussion and get answers to your questions over in Language Help.

Agree with a comment or answer? Like (like) to up-vote the contribution!

Need broader help or resources? Head to Language Help and Tips and Resources. If you are wanting feedback or inspiration for a project, check out Projects.

Looking for motivation to keep learning? Join our wider discussions in Community

Learn more about how to use this guide.

Found a bug? Report it online, or post in Bug Reporting

Have a question about your account or billing? Reach out to our customer support team!

None of the above? Find out where to ask other questions here!

What is the point of populating a many-to-many table like in this exercise? If ‘book’ and ‘author’ are populated, doesn’t ‘books_authors’ get populated?

The point is mapping the book to the author. An author can write many books, and a book can have many authors. The books to authors table will not get populated automatically if thats what you are asking.

Came here to say as someone that has been working in SQL for 20 years… I would suggest you do not write your code in this format as the exercise gives as an example. This is the old format that fell out of favor 15+ years ago. Use the explicit JOIN format.

SELECT column_one AS alias_one, column_two AS alias_two
FROM table_one, table_two, joined_table
WHERE table_one.primary_key = joined_table.foreign_key_one
AND table_two.primary_key = joined_table.foreign_key_two

Beyond looking old and outdated… the explicit JOIN method is much nicer for troubleshooting and performance tuning. You can quickly see which criteria is part of the join vs a filtering factor in the where.

4 Likes

#1
to clarify, are you saying that the outdated code is what you have in your comment and we should not use (which looks the same as the first option in the hint under q4 in the exercise) and that we SHOULD use the alternative code:

SELECT column_one AS alias_one, column_two AS alias_two
FROM table_one
INNER JOIN joined_table
ON table_one.primary_key = joined_table.foreign_key_one
INNER JOIN table_two
ON table_two.primary_key = joined_table.foreign_key_two

or should we use some other code altogether?

#2
Also, in the code you have in your comment, I’m confused because where q4 says “You should expect 3 …” the result excerpt has 3 fields, but in the code we are only selecting 2 columns… how is that right?

#3
Also in that same body of code, why are we selecting FROM ‘joined_table’ if we’re not displaying any columns from it?

Thanks!

2 Likes

Can someone please help figure out the proper way to write the following code?

Idea: book table paired with books_authors table - paired with author table

select book.title as book_title, author.name as author_name, book.description as book_description
from book, author
inner join books_authors
on book.isbn = books_authors.book_isbn
inner join author
on books_authors.author_email = author.email;

Hello @kertesz41 ,

Just understand there are implicit and explicit ways of joining the tables. It may depend on the database you are working with and how old it is. In my Oracle RDBMS experience, I’ve only used implicit joins, where others using MySQL have only used explicit joins.

Here’s a nice short clip about this:
What is the difference between explicit and implicit JOINs in MySQL? – O’Reilly (oreilly.com)

2 Likes

thanks for bringing that distinction to my attention!

I just fixed the syntax a bit and followed the format provided in the question 4 hint, but still error:

SELECT 
book.title as book_title, 
book.description as book_description, 
author.name as author_name
FROM book
INNER JOIN books_authors
ON book.isbn = books_authors.book_isbn
INNER JOIN author
ON books_authors.author_email = author.email;

any tips what’s the issue? I’m very stuck here.

I haven’t taken the course so the link makes me start from the very beginning of the section. :laughing:

I will try my best to help you. Without seeing the tables, columns and error messages, it’s a bit challenging. Can you share the error?

Here are some troubleshooting tips:

  1. Start the query with one table first. Make sure everything is working before adding more to the query.
SELECT 
book.title as book_title, 
book.description as book_description, 
FROM book;
  1. Add the second table and column name after the basic query is working.
1 Like



My code vs solution code
q4 what the ask is
db schema for the 3 tables

is this enough context to see what’s wrong?

Hello @kertesz41 ,

Thanks for including all the screenshots. Your SELECT statement was correct. I took the time to go thru that section of the course to see what the problem was.

Try ordering your column names exactly as specified in the question, book_title, author_name, and book_description, and your error message should disappear.

Hi thanks for the information, Im still confused.
I have the SELECT part, understood.
the FROM part as well all good so far
the WHERE is confusing me along with the AND part
Is the third table in play here? where we put the two primary keys into one table ( I didn’t want to use the word joined together).
This is my Code.
SELECT book.title AS book_title, author.name AS author_name, book.description AS book_description

FROM book, author, joined_table → (books_authors)

WHERE book.isbn = books_authors.author_isbn

AND author.email = books_authors.book_email;

then as I was writing this I realised that the third table that we created earlier in the tutorial came into play… :slight_smile: thanks for helping me Ps the above code is wrong.