我有两张表,值如下:
待定用户

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

08-16 13:47