我想不通爲什麼我不能在格式的結果,我需要:我需要什麼加入?爲什麼我的查詢不起作用?
我的數據庫結構,例如:
CREATE DATABASE IF NOT EXISTS test_b DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
USE test_b;
CREATE TABLE authors(
id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(100),
PRIMARY KEY (id)
);
CREATE TABLE galleries(
id BIGINT NOT NULL AUTO_INCREMENT,
title VARCHAR(100),
author_id BIGINT NOT NULL,
published_at DATETIME,
PRIMARY KEY (id)
);
CREATE TABLE articles(
id BIGINT NOT NULL AUTO_INCREMENT,
title VARCHAR(100),
author_id BIGINT NOT NULL,
published_at DATETIME,
PRIMARY KEY (id)
);
填充一些測試數據到數據庫:
INSERT INTO authors (id, name)
VALUES
(1, 'Mike'),
(2, 'John'),
(3, 'Stan');
INSERT INTO galleries (id, title, author_id, published_at)
VALUES
(1, 'gallery title 1', 1, now()),
(2, 'gallery title 2', 1, now()),
(3, 'gallery title 3', 1, now()),
(4, 'gallery title 4', 2, now()),
(5, 'gallery title 5', 2, now()),
(6, 'gallery title 6', 2, now()),
(7, 'gallery title 7', 3, now()),
(8, 'gallery title 8', 3, now()),
(9, 'gallery title 9', 3, now());
INSERT INTO articles (id, title, author_id, published_at)
VALUES
(1, 'article title 1', 1, now()),
(2, 'article title 2', 1, now()),
(3, 'article title 3', 1, now()),
(4, 'article title 4', 2, now()),
(5, 'article title 5', 2, now()),
(6, 'article title 6', 2, now()),
(7, 'article title 7', 3, now()),
(8, 'article title 8', 3, now()),
(9, 'article title 9', 3, now()),
(10, 'article title 10', 3, now()),
(11, 'article title 11', 3, now()),
(12, 'article title 12', 3, now());
我想要顯示特定作者的所有已發佈內容的表格(作者id = 2),並且我應該可以通過 標題,content_type和已發佈的列進行排序:
title, content_type, published
gallery title 4 gallery DATETIME
gallery title 5 gallery DATETIME
gallery title 6 gallery DATETIME
article title 4 article DATETIME
article title 5 article DATETIME
article title 6 article DATETIME
爲什麼我的查詢不起作用?
SELECT
a.id,
a.name,
CONCAT(IF(b.id IS NOT NULL,'gallery',''), IF(c.id IS NOT NULL,'article','')) as content_type,
CONCAT(COALESCE(b.title, ''), COALESCE(c.title, '')) AS title
FROM authors as a
JOIN galleries AS b ON (a.id = b.author_id)
JOIN articles AS c ON (a.id = c.author_id)
WHERE a.id = 2;
是工會不好的表現? – Dannyboy
但我可以通過content_type或title排序嗎? – Dannyboy
'UNION'很糟糕,因爲它刪除了重複項。 'UNION ALL'只是結合了兩個結果集,所以它通常表現更好。在這種情況下,'UNION ALL'應該幾乎不會增加單獨運行每個查詢的開銷。至於第二條評論:只需添加'按content_type排序'或'按標題排序'。 –