我有艺术家表和artists_alias表。 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 [???])....";
但是我收到错误消息" Subquery返回超过1行" - 我是否比这更复杂?这可以是一个查询吗?
我很乐意将别名逗号分开,所以例如返回行可能看起来像:3," ben折叠5"," ben折叠5,benfolds, ben折五,折五"
答案 0 :(得分:4)
您需要LEFT JOIN
对artist_alias
才能检索这些内容。如果您希望以逗号分隔,请使用汇总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
答案 1 :(得分:2)
如果要返回一行中的所有别名,请使用group_concat()
:
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
答案 2 :(得分:-1)
将限制1放在最后。
从tble中选择*,其中a = 1限制1;