[英]Mysql query left join and group concat
我寫了 mysql 查詢來從 mysql 中獲取數據
SELECT p.TITLE AS `Post Title`,
GROUP_CONCAT(DISTINCT u.USERNAME) AS Writers,
GROUP_CONCAT(DISTINCT c.CategoryName) AS Categories
FROM Posts p
JOIN Posts_Writers pw ON pw.PostID = p.PostID
JOIN Users u ON u.USERID = pw.USERID
JOIN Posts_Categories pc ON pc.PostID = p.PostID
JOIN Categories c ON c.Id = pc.CategoryId
GROUP BY p.TITLE
CREATE TABLE Posts (
`PostID` INTEGER,
`TITLE` VARCHAR(10)
);
INSERT INTO Posts
(`PostID`, `TITLE`)
VALUES
('1', 'SOME TITLE');
CREATE TABLE Users (
`USERID` INTEGER,
`USERNAME` VARCHAR(4)
);
INSERT INTO Users
(`USERID`, `USERNAME`)
VALUES
('1', 'Alaa'),
('2', 'John');
CREATE TABLE Posts_Writers (
id INT auto_increment primary key,
PostID INT,
USERID INT
);
INSERT INTO Posts_Writers (PostId, USERID) VALUES
(1, 1),
(1, 2);
CREATE TABLE Categories (
`Id` INTEGER,
`CategoryName` VARCHAR(9)
);
INSERT INTO Categories
(`Id`, `CategoryName`)
VALUES
('1', 'Business'),
('2', 'Marketing');
CREATE TABLE Posts_Categories (
id INT auto_increment primary key,
PostID INT,
CategoryID INT
);
INSERT INTO Posts_Categories (PostID, CategoryID) VALUES
(1, 1),
(1, 2);
查詢工作正常
問題是:
我通過 group_concat 帶來了 mysql 中的所有類別(商業,營銷)
但是假設我想過濾一個類別的結果
我想獲得業務類別的結果
我試圖添加這些條件
WHERE c.CategoryName = 'Business'
和
AND c.CategoryName = 'Business'
過濾器有效,結果符合預期
但。 問題是類別的 output 只是“業務”
不是商業,營銷還是從前
這是 SQLFiddle
https://www.db-fiddle.com/f/67sGFv3xcERojvypmjdF8/1
我總是想獲得完整的類別列表
這是我想要的結果
Business,Marketing
如果您總是想要完整的類別列表(在過濾器之前),yiu 可以使用原始查詢作為子查詢來獲取列表
SELECT p.TITLE AS `Post Title`,
GROUP_CONCAT(DISTINCT u.USERNAME) AS Writers,
t.Categories
FROM Posts p
JOIN Posts_Writers pw ON pw.PostID = p.PostID
JOIN Users u ON u.USERID = pw.USERID
JOIN Posts_Categories pc ON pc.PostID = p.PostID
JOIN Categories c ON c.Id = pc.CategoryId
JOIN (
SELECT p.TITLE,
GROUP_CONCAT(DISTINCT u.USERNAME) AS Writers,
GROUP_CONCAT(DISTINCT c.CategoryName) AS Categories
FROM Posts p
JOIN Posts_Writers pw ON pw.PostID = p.PostID
JOIN Users u ON u.USERID = pw.USERID
JOIN Posts_Categories pc ON pc.PostID = p.PostID
JOIN Categories c ON c.Id = pc.CategoryId
GROUP BY p.TITLE
) t ON t.title = p.TITLE
GROUP BY p.TITLE, t.Categories
WHERE c.CategoryName = 'Business'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.