mysql左联接和内联接3个表

mysql左联接和内联接3个表,mysql,left-join,inner-join,Mysql,Left Join,Inner Join,我有3张桌子:oc_艺术家、oc_歌曲、oc_歌曲标签 我可以使用此代码选择2个表: SELECT * FROM `oc_songs` LEFT JOIN oc_songs_tags ON oc_songs.song_id=oc_songs_tags.song_id WHERE oc_songs_tags.song_tag IS NULL 现在我需要从oc_艺术家中选择数据。。。我试着回答这个问题: 这是我的代码: SELECT * FROM oc_songs LEFT JOIN oc_a

我有3张桌子:oc_艺术家、oc_歌曲、oc_歌曲标签

我可以使用此代码选择2个表:

SELECT * FROM `oc_songs` LEFT JOIN oc_songs_tags ON oc_songs.song_id=oc_songs_tags.song_id 
WHERE oc_songs_tags.song_tag IS NULL
现在我需要从oc_艺术家中选择数据。。。我试着回答这个问题:

这是我的代码:

SELECT * FROM oc_songs
LEFT JOIN oc_artists
    INNER JOIN oc_songs_tags
    ON oc_songs.song_artist_id = oc_artists.artist_id
ON oc_songs_tags.song_id = oc_songs.song_id
但我得到了这个错误

8 errors were found during analysis.

Unrecognized keyword. (near "ON" at position 131)
Unexpected token. (near "oc_songs_tags" at position 134)
Unexpected token. (near "." at position 147)
Unexpected token. (near "song_id" at position 148)
Unexpected token. (near "=" at position 156)
Unexpected token. (near "oc_songs" at position 158)
Unexpected token. (near "." at position 166)
Unexpected token. (near "song_id" at position 167)

ON子句的错误位置

SELECT * FROM oc_songs
LEFT JOIN oc_artists ON oc_songs.song_artist_id = oc_artists.artist_id
INNER JOIN oc_songs_tags  ON oc_songs_tags.song_id = oc_songs.song_id

你的语法错了。联接语法为:

[JOIN TYPE] JOIN [TABLE B] ON [TABLE A].[COLUMN] = [TABLE B].[COLUMN]
这意味着:

SELECT * FROM oc_songs
 LEFT JOIN oc_artists ON oc_songs.song_artist_id = oc_artists.artist_id
 INNER JOIN oc_songs_tags ON oc_songs.song_id = oc_songs_tags.song_id
理解联接的简单方法是,它们始终是“发件人”中列出的主表与要联接的表之间的联接。因此,将JOIN子句看作是一个连词列表

因此,要将TableA与TableB、TableC和TableD连接起来,您可能会有如下内容:

SELECT * FROM TableA
  JOIN TableB on TableA.tableb_id = TableB.id  -- this is first join
  JOIN TableC on TableA.tablec_id = TableC.id  -- this is second join
  JOIN TableD on TableA.tabled_id = TableD.id  -- this is third join
示例表:

DROP TABLE IF EXISTS `oc_songs` ;
DROP TABLE IF EXISTS `oc_songs_tags` ;
DROP TABLE IF EXISTS `oc_artists` ;

CREATE TABLE `oc_songs` (
  `song_id` int(10) unsigned NOT NULL auto_increment,
  `song_name` varchar(255) NOT NULL,
  `song_artist_id`  int(10),
  PRIMARY KEY  (`song_id`),
  foreign key (`song_artist_id`) references oc_artists(`artist_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

CREATE TABLE `oc_songs_tags` (
  `song_tag_id` int(10) unsigned NOT NULL auto_increment,
  `song_tag` varchar(255) NOT NULL,
  `song_id` int(10),
  PRIMARY KEY  (`song_tag_id`),
  foreign key (`song_id`) references oc_songs(`song_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

CREATE TABLE `oc_artists` (
  `artist_id` int(10) unsigned NOT NULL auto_increment,
  `artist_age` int(4),
  PRIMARY KEY  (`artist_id`)

) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
右键选择:

SELECT * FROM oc_songs
 LEFT JOIN oc_artists ON 
    oc_songs.song_artist_id = oc_artists.artist_id
 INNER JOIN oc_songs_tags ON 
    oc_songs.song_id = oc_songs_tags.song_id;