我正在尝试写一个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,但我如何检查第二个人是否在同一天和同一个人去了同一个地方?
任何帮助都会很棒。
答案 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并不支持。
答案 2 :(得分:0)
如果我理解正确,你会进行简单的聚合,然后过滤记录
SELECT * FROM visitation
WHERE place NOT IN (
SELECT place
FROM visitation
GROUP BY place, visitdate
HAVING COUNT(distinct username) = 1))