首页 文章

sql问题 Session 和匹配所有记录

提问于
浏览
0

我正在尝试写一个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

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

    SELECT * FROM visitation 
     WHERE place NOT IN (
          SELECT place
          FROM visitation
          GROUP BY place, visitdate
          HAVING COUNT(distinct username) = 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

  • 0

    首先,您应该考虑使用关联表 . 您的表中似乎有很多重复数据,很容易导致混淆(如果您插入“Jonh”而不是“John”,它就不会将其识别为同一个人!) .

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

    visitations(user_id, place_id, date)
    

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

相关问题