2

我有这张桌子:

item        year
----        ----
1           1999 
2           1999
3           1999 
2           2000 
4           2000 
2           2001
3           2001
4           2001
5           2001

我需要这个结果(选择 1999)

item        year
----        ----
4           2000
4           2001
5           2001

总而言之,我需要获取不在 1999 年但在另一个不同年份定义的新项目(这是为了稍后在另一个查询中添加它们)。

我使用的是旧的 MySQL 版本,我无法使用 subqueries。有没有兼容的解决方案?

4

2 回答 2

2

这样的事情怎么办

SELECT t1.item, t1.year from table as t1
LEFT JOIN table as t2 ON t2.item = t1.item AND t2.year = 1999
WHERE t2.item IS NULL

在“英语”中,它的意思是,从我的表中选择所有项目。然后为每个项目尝试查找它们是否在 1999 年的表中,否则设置为 NULL。然后你只需要说“将没有匹配元素的元素保留在 t2.

不确定我的解释是否更好

编辑:您当然需要替换table为您自己的表的名称。我在一个小例子上对其进行了测试,它似乎有效。

EDIT2:如果您查看 LEFT JOIN 的结果,您会得到这样的结果:

t1.item     t1.year    t2.item     t2.year
----        ----       ----        ----       
1           1999       1           1999
2           1999       2           1999
3           1999       3           1999
2           2000       2           1999
4           2000       NULL        NULL
2           2001       2           1999
3           2001       3           1999
4           2001       NULL        NULL
5           2001       NULL        NULL

然后,如果您添加WHERE t2.item IS NULL,则只保留表中没有 1999 年的那些。这是更好的理解方式吗?

于 2012-11-16T11:34:40.830 回答
1
select t2.item, t2.year
from mytable t1
left join mytable t2 
    on t2.year > t1.year 
    and t2.item != t1.item
where t1.year = 1999
and t2.item is null
于 2012-11-16T11:46:27.557 回答