[英]SQL query to combine two tables while also showing all records from one table
我正在運行以下查詢來嘗試獲取論壇中的所有類別,並發布其最新主題。 有些類別尚未發布主題,並且還希望將其返回。
SELECT cat_id,cat_name,cat_description, Null as topic_date,
Null as topic_subject
FROM categories
UNION ALL
SELECT cat_id, cat_name, cat_description, topic_date, topic_subject
FROM categories, topics t
WHERE t.topic_cat=cat_id AND topic_id IN
(SELECT topic_id FROM
(SELECT topic_id FROM
(SELECT topic_id, topic_subject, MAX(topic_date) AS 'recent'
FROM topics
GROUP BY topic_Cat
) a
) b
);
該查詢返回以下結果:
+--------+-----------+---------+------------+---------------+
| cat_id | cat_name | cat_des | topic_date | topic_subject |
+--------+-----------+---------+------------+---------------+
| 1 | T20 World| Posts1 | NULL | NULL |
| 2 | Test | delete1| NULL | NULL |
| 3 | Test 2 | txt | NULL | NULL |
| 1 | T20 World| Posts1 | 2016-04-01 01:54:01 | test |
| 2 | Test | delete1| 2016-04-01 03:05:58 | test |
+--------+---------------+------------------------+--------+
如您所見,cat_id 3尚無任何帖子,可以根據需要返回!!但是重復cat_id 1&2。
我正在嘗試刪除重復項,但不確定自己缺少什么
將UNION ALL
替換為UNION
。 后者刪除重復項。
但是,通過您的代碼,您可能正在嘗試執行LEFT OUTER JOIN
,因此您應該查看有關OUTER JOIN
的一些教程。
您需要的是一個左外部連接子句,以將主題的結果僅與類別的結果連接起來。 這些路線的某個位置:
SELECT c.cat_id, c.cat_name, c.cat_description,
max(t.topic_date), t.topic_subject
FROM categories c LEFT OUTER JOIN topics t ON t.topic_cat=c.cat_id
GROUP BY c.cat_id, c.cat_name, c.cat_description, t.topic_subject;
對SQL
有點生銹,但是類似這樣的方法應該起作用:
SELECT
cat.cat_id, cat.cat_name, cat.cat_desc, topic.topic_date, topic.topic_subject
FROM
categories AS cat
LEFT OUTER JOIN (
SELECT
topics.topic_date, topics.topic_subject
FROM
topics
ORDER BY
topics.topic_date DESC
LIMIT
1
)
AS topic ON topic.cat_id = cat.cat_id;
最終對我有用的是將union的結果作為派生表放入另一個select語句中,該語句按cat_id對結果進行分組,從而刪除了重復項和空值。
我還交換了UNION中的兩個select語句,因此首先執行了過濾的語句,然后是顯示所有行的語句。
感謝您的反饋!
SELECT * FROM(SELECT * FROM(SELECT cat_id,cat_name,cat_description,topic_id,topic_subject,MAX(topic_date)AS'topic_date'從類別,主題中獲得topic_cat = cat_id GROUP BY topic_Cat)一個UNION SELECT cat_id,cat_name,cat_description,NULL為topic_id,空為topic_date,空為topic_subject,來自類別)b GROUP BY cat_name;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.