gpt4 book ai didi

mysql - 子查询返回超过 1 行?

转载 作者:行者123 更新时间:2023-11-29 04:24:11 25 4
gpt4 key购买 nike

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

我的查询要获取多位艺术家的艺术家数据,如下所示:

$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"

最佳答案

您将需要针对artist_aliasLEFT JOIN 来检索这些。如果您希望它们以逗号分隔,请使用聚合 GROUP_CONCAT() .

使用 LEFT JOIN 以便即使艺术家没有关联的别名也会返回一行。

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

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() 以逗号分隔的别名列表:

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

关于mysql - 子查询返回超过 1 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15238483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com