1

我是 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;

我正在尝试按艺术家名称“子弹”查找所有曲目。我的表类似于以下内容:

曲目

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;

问题是我需要一个“是”(如果它与艺术家姓名匹配)或“否”,如果它与艺术家姓名不匹配。

4

3 回答 3

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

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

于 2013-11-13T20:30:51.103 回答
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 "

反而。

于 2013-11-13T20:32:26.503 回答
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;

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

于 2013-11-13T20:32:33.580 回答