我有一个存储有关艺术家,乐队和专辑的信息的数据库,我试图为超过1张专辑的乐队选择乐队名称和专辑名称。
band_id, name, year_formed
1, blink182, 1990
2, fall out boy, 1997
3, u2, 1982
4, coldplay, 1990
5, zach brown band, 2002
和专辑
album_id, title, band_id
1, take off your pants and jack it, 1
2, stars, 3
3, fbgm, 3
4, reach, 3
5, yup, 4
这似乎不是一个问题太难,但我无法弄清楚我的生活。 问题似乎是从select语句中获取专辑标题和乐队名称。
SELECT b.name, alb.title
FROM band as b, album as alb
WHERE exists (SELECT * FROM album as al WHERE b.bid = alb.bid)
返回所有乐队名称及其专辑标题。我的猜测是让子查询处理多个专辑的乐队,但我完全不知道如何做到这一点。一般来说,子查询一直在抛弃我的循环,所以对它们如何在概念上工作的任何好的描述都会受到赞赏。
答案 0 :(得分:0)
我认为你没有使用EXISTS
,而是使用JOIN
:
SELECT b.name, a.title
FROM band b
JOIN album a ON b.bid = a.bid
如果您正在寻找具有多个标题的乐队,那么您还需要使用汇总查询:
SELECT b.name, a.title
FROM band b
JOIN album a ON b.band_id = a.band_id
JOIN (SELECT band_id
FROM album
GROUP BY band_id
HAVING COUNT(*) > 1) c ON b.band_id = c.band_id
答案 1 :(得分:0)
您可以使用LEFT JOIN
:
SELECT b.name,x.title AS Title
FROM band b LEFT JOIN ( SELECT band_id
, GROUP_CONCAT(title SEPARATOR ', ') AS Title
FROM album
GROUP BY band_id
HAVING COUNT(*) > 1) x ON b.band_id = x.band_id
WHERE x.band_id IS NOT NULL
答案 2 :(得分:0)
您可以尝试此查询。您需要使用group_concat()
和JOIN
来获取所有标题。在这里查看演示小提琴http://sqlfiddle.com/#!2/3d689/3。
select b.name,tab.new_title
from band b
inner join
(
select `band_id`,
group_concat(`title`) as new_title
from album
group by `band_id`
having count(*) > 1
) tab on b.`band_id` = tab.`band_id`