选择在同一列中具有不同值的记录和在没有子查询的情况下在另一列中具有不同值的记录

时间:2012-11-16 11:23:24

标签: mysql sql select

我有这张桌子:

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版本,我无法使用子查询。有没有兼容的解决方案?

2 个答案:

答案 0 :(得分: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年的那些。 这是理解它的更好方法吗?

答案 1 :(得分: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