SQL查询INNER JOIN语法

时间:2013-11-13 20:26:46

标签: sql

我是SQL新手。我有一个语法错误,似乎无法让SQL查询系统同意它:

select t.tracktitle from tracks t
inner join titles ti
inner join artists ar
if (ar.artistname = "The Bullets
", 'yes', 'no')
on ti.titleid = t.titleid;

我试图通过艺术家名称“The Bullets”找到所有曲目。我的表类似于以下内容:

:跟踪

TitleID, TrackNum, TrackTitle

标题

TitleID, ArtistID, Title

艺术家

ArtistID, ArtistName, Region

我的问题是必须按艺术家名称“The Bullets”查找所有曲目,以及我对查询的尝试:

select t.tracktitle from tracks t
inner join titles ti
inner join artists ar
if (ar.artistname = "The Bullets
", 'yes', 'no')
on ti.titleid = t.titleid;

问题是我需要一个YES(如果它匹配艺术家名称)或NO,如果它与艺术家名称不匹配。

3 个答案:

答案 0 :(得分:1)

试试这个:

select t.tracktitle 
from tracks t inner join titles ti 
     on ti.titleid = t.titleid
     inner join artists ar 
     on ar.artistid =  ti.artistid
      and ar.ArtistName = 'The Bullets'

如果您需要检查记录是否存在:

select t.tracktitle 
from tracks t inner join titles ti 
     on ti.titleid = t.titleid
     inner join artists ar 
     on ar.artistid =  ti.artistid
      and ar.ArtistName = 'The Bullets'
limit 1

空结果(无行) - '是',一行 - '是'

答案 1 :(得分:1)

错误编号1 - 您正在从一个表加入另一个表而不指定任何字段。正确的语法是:

 from table1 inner join table2 on table1.fieldname = table2.fieldname

错误号码2 - 这是无效的sql:

if (ar.artistname = "The Bullets ", 'yes', 'no')

你想要像

这样的东西
where ar.artistname = "The Bullets "

代替。

答案 2 :(得分:1)

if语句是个问题,因为SQL的这种语法称为case语句。也就是说,根据您的需要,您应该将其移至JOIN

SELECT Tracks.tracktitle
FROM tracks Tracks
INNER JOIN titles Titles ON Titles.titleid = Tracks.titleid
INNER JOIN artists Artists ON Artists.artistid = Titles.artistid
    AND Artists.artistname =  'The Bullets';

如果你想让所有艺术家都过来并且有一些标识符行(你的“是”或“否”):

SELECT Tracks.tracktitle
    ,CASE Artists.artistname
        WHEN 'The Bullets' THEN 'yes'
        ELSE 'no'
    END AS isTheBullets
FROM tracks Tracks
INNER JOIN titles Titles ON Titles.titleid = Tracks.titleid
INNER JOIN artists Artists ON Artists.artistid = Titles.artistid;

这就是您尝试使用SQL语法执行if语句的方法。请注意,我不再在JOIN中包含ar.artistname,因为您想要收回所有艺术家,并且只识别那些“子弹”。