繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM