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