Neron7
Neron7

Reputation: 29

two different table join mysql

I have 2 table which one:

Albums:

CREATE TABLE IF NOT EXISTS `albums` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  `singer` varchar(64) NOT NULL,
  `year` int(11) NOT NULL,
  `releaseDate` date DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `categoryId` (`categoryId`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

Music:

CREATE TABLE IF NOT EXISTS `musics` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  `singer` varchar(128) NOT NULL,
  `genre` varchar(128) NOT NULL,
  `albumId` int(11) DEFAULT NULL,
  `year` int(4) NOT NULL,
  `releaseDate` date DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `categoryId` (`categoryId`),
  KEY `albumId` (`albumId`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;

I want join that's table and ordered by releaseDate. It's possible? Sorry for my english.

RESULT: Now I get some result:

+-----------------------------------------------+-------------------------+-------------+
| albums_name                                   | musics_name             | releaseDate |
+-----------------------------------------------+-------------------------+-------------+
| The Artificial Theory For The Dramatic Beauty | K                       | NULL        |
| The Artificial Theory For The Dramatic Beauty | Fiction In Hope         | NULL        |
| The Artificial Theory For The Dramatic Beauty | Chemicarium             | NULL        |
| The Artificial Theory For The Dramatic Beauty | Voice                   | NULL        |
| The Artificial Theory For The Dramatic Beauty | Blue                    | NULL        |
| The Artificial Theory For The Dramatic Beauty | Mirror                  | NULL        |
| The Artificial Theory For The Dramatic Beauty | If You Want To Wake Up? | NULL        |
| The Artificial Theory For The Dramatic Beauty | Interlude               | NULL        |
| NULL                                          | Everything At Once      | 2010-11-11  |
| NULL                                          | Blue Freightliner       | 2011-11-11  |
+-----------------------------------------------+-------------------------+-------------+

I want:

+-----------------------------------------------+-------------------------+-------------+
| albums_name                                   | musics_name             | releaseDate |
+-----------------------------------------------+-------------------------+-------------+
| The Artificial Theory For The Dramatic Beauty | NULL                    | 2009-11-11  |
| NULL                                          | Everything At Once      | 2010-11-11  |
| NULL                                          | Blue Freightliner       | 2011-11-11  |
+-----------------------------------------------+-------------------------+-------------+

Upvotes: 1

Views: 62

Answers (2)

Andriy M
Andriy M

Reputation: 77677

There are two very distinct parts that your output appears to consist of:

  • albums and their release dates;

  • album-less tracks and their release dates.

Each part coming from a different table, this strikes me as a classic example of a union, not a join, of two sets:

SELECT
  name AS albums_name,
  NULL AS musics_name,
  releaseDate
FROM albums

UNION ALL

SELECT
  NULL AS albums_name,
  name AS musics_name,
  releaseDate
FROM musics
WHERE
  album_id IS NULL

ORDER BY
  releaseDate ASC
;

Upvotes: 1

random_user_name
random_user_name

Reputation: 26160

You should do some studying / playing with JOIN. There's a few different types (INNER JOIN, LEFT JOIN).

Here's a simple example to get you started:

SELECT albums.name AS albums.name, musics.name AS musics_name, musics.releaseDate 
    FROM albums 
    LEFT JOIN musics ON albums.id = musics.albumId 
    ORDER BY musics.releaseDate

Or, if you need music and only the album when it matches:

SELECT albums.name AS albums.name, musics.name AS musics_name, musics.releaseDate 
    FROM musics 
    LEFT JOIN albums ON musics.albumId = albums.id
    ORDER BY musics.releaseDate

Upvotes: 3

Related Questions