簡體   English   中英

SQL查詢內部聯接的值為0

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

http://sqlfiddle.com/#!3/7332c/15

嘗試這個:

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.

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