Mysql 返回超过1行的子查询?

Mysql 返回超过1行的子查询?,mysql,sql,Mysql,Sql,我有一个艺术家表和一个艺术家别名表。艺术家别名包含艺术家的所有可能名称 我的查询用于获取多个艺术家的艺术家数据,如下所示: $sql = "SELECT artist.artist_id, artist.artist_name FROM artists artist WHERE artist.artist_id IN (3,9,500);"; 现在,我还想包括任何已知的别名,可以是1或X。我可以在上面的查询中获取这些信息吗?或者这是一个单独的查询 我在考虑做一些

我有一个艺术家表和一个艺术家别名表。艺术家别名包含艺术家的所有可能名称

我的查询用于获取多个艺术家的艺术家数据,如下所示:

$sql = "SELECT artist.artist_id, artist.artist_name
        FROM artists artist
        WHERE artist.artist_id IN (3,9,500);";
现在,我还想包括任何已知的别名,可以是1或X。我可以在上面的查询中获取这些信息吗?或者这是一个单独的查询

我在考虑做一些事情,比如:

$sql = "SELECT artist.artist_id, artist.artist_name, 
       (SELECT * FROM artists_alias WHERE [???])....";
但我得到错误消息子查询返回超过1行-我是否使这比它更复杂?这是一个问题吗

我很乐意将别名用逗号分隔,因此,例如,返回行可能如下所示:3,ben folds five,ben folds five,benfolds,ben folds five,folds five

您需要对Artister_alias进行左连接才能检索这些别名。如果您想让它们以逗号分隔,请使用聚合

使用左联接,这样即使艺术家没有关联的别名,行也会返回

每个别名一行,每行复制艺术家信息:

SELECT
  artist.artist_id, 
  artist.artist_name,
  /* Retrieves all cols from artists_alias. SELECT only what you need... */
  artists_alias.*
FROM
  artist
  /* Assuming there's an artists_alias.artist_id. Substitute the correct column name */
  LEFT JOIN artists_alias ON artist.artist_id = artists_alias.artist_id
WHERE artist.artist_id IN (3, 9, 500)
或通过GROUP_CONCAT以逗号分隔的别名列表:


把限制1放在最后


从tble中选择*,其中a=1限制1

如果要返回一行中的所有别名,请使用group_concat:


这实际上并不能解决问题,它只是掩盖了症状。啊,这太棒了!多谢各位!出于某种原因,我认为左连接无法获取所有值。耸肩
SELECT
  artist.artist_id, 
  artist.artist_name,
  /* Substitute the correct column name for the actual alias */
  GROUP_CONCAT(artists_alias.alias) AS all_aliases
FROM
  artist
  LEFT JOIN artists_alias ON artist.artist_id = artists_alias.artist_id
WHERE artist.artist_id IN (3, 9, 500)
GROUP BY 
  artist.artist_id,
  artist.artist_name
SELECT a.artist_id, a.artist_name,
       group_concat(aa.alias) as aliases
FROM artists artist left outer join
     artists_alias aa
     on a.artist_id = aa.artist_id
WHERE at.artist_id IN (3,9,500)
group by a.artist_id, a.artist_name