[英]select records which have different values in the same column and different values in another column without subqueries
我有这张桌子:
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 。 有没有兼容的解决方案?
这样的事情怎么办
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 年的那些。 这是更好的理解方式吗?
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.