簡體   English   中英

Mysql 查詢左連接和組連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM