[英]SQL query inner join with 0 values
我有這張桌子:
idSection | idQuestion | title | enunciation | idScale
1 | 1 | title 1 | question 1 | 3
1 | 1 | title 1 | question 1 | 3
1 | 1 | title 1 | question 1 | 3
1 | 1 | title 1 | question 1 | 2
1 | 1 | title 1 | question 1 | 5
1 | 2 | title 2 | question 2 | 1
1 | 2 | title 2 | question 2 | 3
1 | 3 | title 3 | question 3 | 1
並有此表:
idScale | name
1 | Very Bad
2 | Bad
3 | Good
4 | Very Good
5 | Excellent
我想要一個這樣的表:
idSection | idQuestion | title | enunciation | Total | Name
1 | 1 | title 1 | question 1 | 0 | Very Bad
1 | 1 | title 1 | question 1 | 0 | Bad
1 | 1 | title 1 | question 1 | 3 | Good
1 | 1 | title 1 | question 1 | 0 | Very Good
1 | 1 | title 1 | question 1 | 1 | Excellent
1 | 2 | title 2 | question 2 | 0 | Very Bad
1 | 2 | title 2 | question 2 | 1 | Bad
1 | 2 | title 2 | question 2 | 3 | Good
1 | 2 | title 2 | question 2 | 0 | Very Good
1 | 2 | title 2 | question 2 | 0 | Excellent
查詢:
SELECT
t1.idSection, t1.idQuestion, t1.title, t1.enunciation,
COUNT(t1.idScale) as Total, t2.name
FROM
table1 AS t1
INNER JOIN
table2 as t2 ON t2.idScale = t1.idScale
GROUP BY
t1.idSection, t1.idQuestion, t1.title, t1.enunciation, t2.name
結果是查詢:
idSection | idQuestion | title | enunciation | Total | Name
1 | 1 | title 1 | question 1 | 3 | Good
1 | 1 | title 1 | question 1 | 1 | Excellent
1 | 2 | title 2 | question 2 | 1 | Bad
1 | 2 | title 2 | question 2 | 3 | Good
問題是不會出現查詢值為0的查詢。
我認為您正在尋找:
SELECT
t1.idSection,
t1.idQuestion,
t1.title,
t1.enunciation,
SUM(case when t1.idScale=t2.idScale then 1 else 0 end) as Total,
t2.name
FROM
table1 AS t1, table2 as t2
GROUP BY t1.idSection, t1.idQuestion, t1.title, t1.enunciation, t2.name, t2.idScale
ORDER BY t1.idSection, t1.idQuestion, t2.idScale
這不是INNER JOIN,而是笛卡爾連接(table1的每一行都與table2的每一行相乘)。 我正在使用SUM來計算INNER JOIN成功的行。
嘗試這個:
(SELECT t1.idSection, t1.idQuestion, t1.title, t1.enunciation,
COUNT(t1.idScale) as Total, t2.name
FROM table1 t1
JOIN table2 t2
ON t2.idScale=t1.idScale
GROUP BY t1.idSection, t1.idQuestion, t1.title, t1.enunciation, t2.name)
UNION
(SELECT DISTINCT
t1.idSection, idQuestion, title, enunciation, 0 as Total , t2.name
FROM table1 t1,table2 t2
WHERE NOT EXISTS
(SELECT *
FROM table1
JOIN table2
ON table2.idScale=table1.idScale
WHERE t1.idSection = table1.idSection
AND t1.idQuestion = table1.idQuestion
AND t2.idScale= table2.idScale)
)
嘗試這個:
SELECT t1.idSection, t1.idQuestion, t1.title, t1.enunciation,
COUNT(t1.idScale) as Total, t2.name FROM table1 AS t1
RIGHT JOIN table2 as t2 ON t2.idScale=t1.idScale
GROUP BY t1.idSection, t1.idQuestion, t1.title, t1.enunciation, t2.name
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.