2017-08-24 50 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

相关问题