2017-08-24 54 views
0

我不知道如何編寫SQL代碼來獲取表1中顯示的行數爲+/- 1的rownames數。例如,因爲rownumber在彼此之內,所以我會將'Exclusive'和'Popular Episodes'計算在內。但是我不會將'Popular Movies'計算在內,因爲差距大於1.通常情況下,我會交換表格,但我只知道如何使用INTERSECT進行精確匹配。sql count其中2個表中的記錄幾乎匹配

Table 1 
+------------------+-----------+ 
| rowname   | rownumber | 
+------------------+-----------+ 
| Exclusive  |   1 | 
| Popular Movies |   3 | 
| New Seasons  |   7 | 
| Popular Episodes |   8 | 
+------------------+-----------+ 

Table 2 
+------------------+-----------+ 
| rowname  | rownumber | 
+------------------+-----------+ 
| Exclusive  |   2 | 
| Popular Episodes |   7 | 
| Popular Movies |   8 | 
+------------------+-----------+ 

在此先感謝您的幫助!

+0

如果New Seasons在表1中爲1,而在表2中爲NULL(不存在),那麼可以計算一下嗎? –

回答

2

爲什麼不簡單加入?例如:

SELECT rowname 
FROM t1 JOIN t2 ON t1.rowname = t2.rowname 
WHERE t1.rownumber - t2.rownumber BETWEEN -1 AND 1 

只需修復名稱。

或SELECT COUNT(rowname)如果你只是想要的號碼。

+0

如果rowname在Table1中出現多次(即它出現在第1行和第12行),這將如何改變? – Slatemagic

+0

這將使它成爲一個完全不同的問題。如果rownames不是唯一的,那麼這個問題就沒有意義了(需要新的邏輯)。 –

+0

我不確定我明白爲什麼這是一個不同的問題。如果流行電影在表1中的rownumber 3和rownumber 9中,那麼我希望解決方案包含熱門電影而不是排除它。 – Slatemagic

0

如果您認爲兩個表中的空白記錄爲'New Seasons'時爲0,如果它爲1,則使用LEFT JOIN。

SELECT t1.rowname 
    FROM table1 t1 
    LEFT JOIN table2 t2 
    ON t1.rowname = t2.rowname 
WHERE COALESCE(t1.rownumber,0) - COALESCE(t2.rownumber,0) BETWEEN -1 AND 1 
+0

謝謝!我會嘗試這些,讓你知道它是怎麼回事! – Slatemagic

+0

JOIN或INNER JOIN不應該包括它 –

+1

我測試的數據集不同於我發佈的示例。我的錯! – Slatemagic

相關問題