我今天正在处理一个图书馆数据库。该结构有点奇怪,我无法按照我想要的方式提取数据。
我有这样的疑问:
SELECT
lc.catalogID, hb_g.intro AS 'Genre/Subject', gk.kidsAge AS 'Ages',
pb_g.intro AS 'Genre/Subject', pb.ageRange AS 'Ages'
FROM
library.libraryCatalog lc
INNER JOIN
library.hardbacks hb ON lc.catalogID = hb.catalogId
INNER JOIN
library.paperbacks pb ON lc.catalogID = pb.catalogId
LEFT JOIN
library.genres hb_g ON hb.genreId = hb_g.genreId
LEFT JOIN
library.genres pb_g ON pb.genreId = pb_g.genreId
LEFT JOIN
library.bookSeries bs ON hb.id = bs.logId
LEFT JOIN
library.genreKids gk ON bs.kidsId = gk.kidsId
WHERE
lc.libraryID = 87
它产生如下所示的结果。我遇到的问题是,我需要
Fairy Tales
和 12+
结果出现在与其他类型相同的列中。
catalogID Genre/Subject Age up to Genre/Subject Ages
--------------------------------------------------------------
2021 Mystery 8+ Fairy Tales 12+
2021 Sci-Fi/Fantasy 12+ Fairy Tales 12+
2021 Fiction 10+ Fairy Tales 12+
2021 Non-Fiction 12+ Fairy Tales 12+
2021 Biography 16+ Fairy Tales 12+
2021 Historical 10+ Fairy Tales 12+
我希望有这样的事情:
catalogID Genre/Subject Age up to
------------------------------------------
2021 Mystery 8+
2021 Sci-Fi/Fantasy 12+
2021 Fiction 10+
2021 Non-Fiction 12+
2021 Biography 16+
2021 Historical 12+
2021 Fairy Tales 12+ <---- moved here
我尝试使用
ISNULL
和 COALESCE
但这些都不起作用。
这样的事情可能吗?
看起来您需要合并两个单独的结果集,然后重新连接到
catalogID
。
SELECT
lc.catalogID,
b.GenreOrSubject,
b.Ages
FROM
library.libraryCatalog lc
JOIN (
SELECT
hb.catalogId,
hb_g.intro AS GenreOrSubject,
gk.kidsAge AS Ages
FROM
library.hardbacks hb
JOIN
library.genres hb_g ON hb.genreId = hb_g.genreId
JOIN
library.bookSeries bs ON hb.id = bs.logId
JOIN
library.genreKids gk ON bs.kidsId = gk.kidsId
UNION ALL
SELECT
pb.catalogID,
pb_g.intro,
pb.ageRange
FROM
library.paperbacks pb
JOIN
library.genres pb_g ON pb.genreId = pb_g.genreId
) b
ON lc.catalogID = b.catalogId
WHERE
lc.libraryID = 87;