简单SQL查询的说明

时间:2015-09-23 00:00:17

标签: mysql sql querying

我有一个问题,关于如何在这个SQL查询中使用小于运算符来回答以下英语声明:

Drinkers who frequent at least two bars

注意:有一个叫做频率的表,里面有饮酒者和酒吧。

现在,我最初使用group byhaving count运算符解决了这个问题,但我偶然发现了这个也是正确的查询:

SELECT DISTINCT f1.drinker
FROM frequents f1, frequents f2
WHERE f1.drinker = f2.drinker
AND f1.bar < f2.bar

我在理解这个查询的机制方面遇到了一些麻烦,特别是最后的AND语句。

2 个答案:

答案 0 :(得分:0)

桌子在同一个饮水器上自行连接。现在为了f1.bar&lt; f2.bar暗示f1.bar!= f2.bar。因此2条(可能更多)。

答案 1 :(得分:0)

如果最后一个并且说AND f1.bar <> f2.bar

会更有意义

所以,这里的想法是有一个笛卡尔联接发生:表1的每一行都连接到表2的每一行。所以你可以想象你的结果集包含frequents中的行数时间本身。例如,如果频繁使用10行,结果集中将有100行:每行与其他行连接。好。所以从结果集中,你现在说,好吧,我只关心频繁id相同的行,但它们频繁的 bar 是不同的。显然,f1.bar&lt;&gt; f2.bar是必要的,否则每行都会与自身匹配。这可以保证频率中心至少有两行显示出来。 distinct要注意删除其他重复项。注意:count(*)和group by是一种更好的方法。