2014-02-22 191 views
1

我有两个表,一个:两个不同的表连接mysql的

专辑:

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 ; 

音乐:

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 ; 

我想加入这台由RELEASEDATE有序。这是可能的? 对不起,我的英语。

结果: 现在,我得到了一些成绩:

+-----------------------------------------------+-------------------------+-------------+ 
| 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 | 
+-----------------------------------------------+-------------------------+-------------+ 

我想:

+-----------------------------------------------+-------------------------+-------------+ 
| 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 | 
+-----------------------------------------------+-------------------------+-------------+ 
+0

显示的一些数据和想要的结果。 – wumpz

回答

1

有两个截然不同的部分,你的输出似乎包括:

  • 专辑及其发行日期;

  • 无专辑曲目及其发行日期。

从不同的表上的每一个部分,这在我看来是一个工会一个典型的例子,而不是加入,两套:

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

你应该做一些研究/与JOIN打。有几种不同的类型(INNER JOIN,LEFT JOIN)。

这里有一个简单的例子,让你开始:

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 

或者,如果你需要的音乐,只有这张专辑时,它匹配:

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 
+0

但我有音乐没有专辑和albumId = null – Neron7

+0

@ Neron7 - 所以切换它,所以它是'SELECT ...从音乐左加入专辑...' –

+0

我玩JOIN但我不给正确的结果。 – Neron7