我刚刚安装了WAMP服务器在我的Windows 10电脑和我玩它学习如何查询SQL表。所以我做了一个我不知道如何查询它的情况下。我已经搜索了如果我的问题是一个重复的问题在这个网站上,但由于我有限的英语-我不能在这个网站上找到问题一样我。
我的表名是test。在PhpMyAdmin中它看起来像这样:
用普通语言表达的查询如下:
- 显示名称在2020/01/01之前具有TGL且在2022/02/01之后具有TGL的行 *
所以预期的结果就是我用红色标记的那个:
从这个网站的问题,这是类似于我的问题是查询表使用NOT BETWEEN
和使用< or >
.所以我尝试这个问题的答案,像这样在PhpMyAdmin:
SELECT * FROM `test` WHERE TGL < "2020/01/01" OR TGL > "2022/02/01"
另一次尝试使用NOT BETWEEN
SELECT * FROM `test` WHERE TGL NOT BETWEEN "2020/01/01" AND "2022/02/01"
但查询结果(逻辑上)包含另一行(CCC),该行的TGL在2020/01/01之前,或TGL在2022/02/01(BBB)之后。如下图所示:
打得不合逻辑,所以我也试着作这样的查询:
SELECT * FROM `test` WHERE TGL < "2020/01/01" AND TGL > "2022/02/01"
并且查询结果显示一个空行。
按照我的问题的答案,所以我试着:
SELECT * FROM `test` WHERE TGL NOT BETWEEN "2020/01/01" AND "2022/02/01" GROUP BY NAMA
但查询结果是这样的:
由于我仍然不能找到这个问题在这个网站上像我的,我会很高兴,如果有人可以给我一个重复的问题链接-所以我可以删除这个问题。
但如果没有像我这样的重复问题,我如何查询日期才能得到预期的结果呢?
任何形式的回应都将不胜感激。
先谢谢你了。
修改
目前我用一种愚蠢的方式来解决问题,我认为在Maven看来这是一种不好的方式(在我这样的情况下这样做并不好,因为还有另一种更好的方式)。我在网上找到了一种方法,叫做嵌套查询,一种使用另一个查询结果的查询。所以我使用了这种方法。
select * from test WHERE NAMA IN
(SELECT distinct NAMA FROM test WHERE NAMA IN
(SELECT DISTINCT NAMA from test where TGL < "2020/01/01")
and (TGL > "2022/02/01"))
AND (TGL < "2020/01/01" or TGL > "2022/02/01")
虽然上面的查询给了我预期的结果,我仍然想知道是否有另一种方法是正确的方式。
- 谢谢-谢谢
1条答案
按热度按时间8hhllhi21#
您的问题令人困惑。您正确地使用了此查询并返回了所需的结果:
为什么不需要行'B004'和'C001',因为它们都满足要求?
'B004' has TGL after 2022/02/01
'C001' has TGL before 2020/01/01
个