SQL中令人费解的超集

时间:2016-08-09 13:50:30

标签: php sql-server

我正在查询数据库(SQL)以查找发送请求的系统,以查看哪些是各种不同版本的Windows(和其他操作系统)。我检查一些已知的口味,然后尝试获得一个全能,但所有捕获的捕获量少于个别条款,我无法解决原因。

e.g。对于这个PHP / SQL:

$monthSelect = "SELECT DISTINCT(host) FROM $table WHERE date > ('$lastMonth') ";
$v61 = $db->query($monthSelect."AND sys LIKE '%win32_v6.1%'")->num_rows;
echo "v61: $v61<br>\n";
$v62 = $db->query($monthSelect."AND sys LIKE '%win32_v6.2%'")->num_rows;
echo "v62: $v62<br>\n";
$nWin = $db->query($monthSelect."AND sys LIKE '%win32_v%'")->num_rows;
echo "nWin: $nWin<br>\n";

我得到以下输出:

v61: 1907
v62: 2181
nWin: 4036

4036显然小于2181 + 1907。但是$nWin不应该提供$v62$v61以及其他任何版本的超集吗?

我对如何获得这些答案感到茫然

1 个答案:

答案 0 :(得分:3)

你正在做一个SELECT DISTINCT。

如果前两个查询中都存在重复的主机,则它们将仅在第三个查询中计数一次。所以第三个查询的总和将小于前两个查询的总和。