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