sql问题会议和匹配所有记录

时间:2018-03-16 03:12:41

标签: mysql sql

我正在尝试写一个SQL查询,查找两个人是否在同一天去了同一个地方。

例如,如果John于15/03/2018,10/02/201和03/01/2018去了沃尔玛,并且如果Doe在同一天去沃尔玛,则显示结果。

但如果Doe于15/03/2018,10/02/201,而不是03/01/2018去了沃尔玛,那么请不要显示此记录。

这是表格的架构。 visitation (username, name, place, date);

john, John, Walmart, '15/03/2018'
john, John, Walmart, '10/02/2018'
john, John, Walmart, '03/01/2018'

doe, Doe, Walmart, '15/03/2018'
doe, Doe, Walmart, '10/02/2018'
doe, Doe, BestBuy, '11/13/2018'

上述输出应为零。

我知道我必须自己加入地点和日期,用户名不等于username2,但我如何检查第二个人是否在同一天和同一个人去了同一个地方?

任何帮助都会很棒。

3 个答案:

答案 0 :(得分:0)

首先,您应该考虑使用关联表。你的表中似乎有很多重复的数据很容易引起混淆(如果你插入" Jonh"而不是" John"它已经不会将它识别为同一个人!)。

所以你应该有一个users表和一个places表以及一个额外的关联表,你可以将它们连接起来:

visitations(user_id, place_id, date)

因此,通过使用外键约束,您可以轻松查询关系并获得所需的连接。

答案 1 :(得分:0)

如果您事先知道要比较的两个用户,那么这样的事情就行了。

   SELECT * FROM visitation AS v1 
      JOIN visitation v2 ON v1.place = v2.place 
                  AND v1.visitdate = v2.visitdate 
  WHERE v1.username='john' AND v2.username = 'joe';

这实际上是一个交叉,MySQL并不支持。

Sql Fiddle

答案 2 :(得分:0)

如果我理解正确,你会进行简单的聚合,然后过滤记录

SELECT * FROM visitation 
 WHERE place NOT IN (
      SELECT place
      FROM visitation
      GROUP BY place, visitdate
      HAVING COUNT(distinct username) = 1))