我有两张表,值如下:
待定用户
user_ID name
1 somename1
2 somename2
3 somename3
待会见
int_ID user_ID answer date
1 1 sometextaba 2012-11-04
2 2 sometextxcec 2012-10-05
3 1 sometextabs 2011-06-04
4 3 sometextxcfc 2012-11-04
5 3 sometextxcdn 2012-11-04
我怎么能问mysql告诉我,上表中只有谁今年接受了采访,但前几年又接受了另一次采访?唯一一个是id=1的用户(因为他今年有一次面试(intid 1),但第一次面试是在2011年(intid 3)
不幸的是,我甚至不能选择他们。。
最佳答案
通过加入表本身,其中一方只包括今年的访谈,另一方只包括往年,INNER JOIN
的结果将是用户同时拥有这两者。
因为它不需要依赖任何聚合或子查询,所以这个方法应该非常高效。尤其是,如果date
列有索引。
SELECT
DISTINCT
thisyear.user_ID,
name
FROM
/* Left side of join retrieces only this year (year=2012) */
tbl_interviews thisyear
/* Right side retrieves year < 2012 */
/* The combined result will elmininate any users who don't exist on both sides of the join */
INNER JOIN tbl_interviews previous_years ON thisyear.user_ID = previous_years.user_ID
/* and JOIN in the user table to get a name */
INNER JOIN tbl_users ON tbl_users.user_ID = thisyear.user_ID
WHERE
YEAR(thisyear.date) = 2012
AND YEAR(previous_years.date) < 2012
Here is a demonstration on SQLFiddle