我是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,如果它与艺术家名称不匹配。
答案 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
,因为您想要收回所有艺术家,并且只识别那些“子弹”。