子查询返回多行SQL

时间:2013-11-19 01:54:24

标签: sql

此查询返回多行:

SELECT T.Title FROM Titles T WHERE T.ArtistID = 
(SELECT A.ArtistID FROM Artists A WHERE A.Country = "USA");

是因为它是暧昧的吗?

3 个答案:

答案 0 :(得分:2)

不,这是因为美国有不止一位艺术家。

你想要什么?所有作者在美国写的标题?或者一个特定作者的所有标题?

如果您想要在美国撰写作者的所有作品,

Select title from Titles
Where ArtistId In (Select ArtistID From artists
                   where Country = 'USA')

Select title from Titles t
    join Artists a 
        On a.ArtistId = t.ArtistId
Where a.Country = 'USA'

如果您想要一个特定作者的标题,您需要指定您想要标题的特定作者...

答案 1 :(得分:0)

这意味着你有多个艺术家,国家='美国'

你可以像这样修复它,只返回来自美国任何艺术家的任何标题

SELECT T.Title FROM Titles T WHERE T.ArtistID = 
(SELECT TOP 1 A.ArtistID FROM Artists A WHERE A.Country = "USA");

如果你想要与美国艺术家的所有头衔使用JOIN

SELECT T.Title FROM Titles T 
JOIN Artists A ON T.ArtistID = A.ArtistID
WHERE A.Country = "USA"

SELECT T.Title FROM Titles T WHERE T.ArtistID in
(SELECT TOP 1 A.ArtistID FROM Artists A WHERE A.Country = "USA");

答案 2 :(得分:0)

你的问题很模糊。没有看到数据,我可以说你为什么有两行。

有多少ArtistIDs拥有美国? 单独运行子查询,查看它返回的ID数量以及哪些ID。

那么这些ArtistID出现在Titles表中的次数。我的猜测不止一个。