您好,我需要在MySQL查询中提供一些帮助。 我有2个表,需要找出表A中存在的值,而表B中不存在该值,在表B中要比较的值应具有当月列值为当前月。
表A
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
表B
+------+-----+
| id |Month|
+------+-----+
| 1 |March|
| 2 |March|
| 3 |April|
+------+-----+
我想显示表A中4月份该表中所有不存在的值。 就像ID 3支付了4月的费用,而ID 1和ID 2却没有支付。
结果表应如下所示。
+------+
| id |
+------+
| 1 |
| 2 |
+------+
我尝试了多个查询,例如
SELECT * FROM A LEFT JOIN B ON A.id = B.id WHERE B.id IS NULL and B.month=(current date)
和
SELECT * FROM A LEFT JOIN (select * from B where month=(current month)) ON A.id = B.id WHERE B.id IS NULL
我不明白我在这方面做错了什么。很抱歉出现任何错字错误,因为该错误已通过手机发布。
答案 0 :(得分:0)
显示表B中4月份该表B中不存在的所有值
cityFound
答案 1 :(得分:0)
我认为您需要在表A中添加更多条件,因为它没有“月”列。并且由于表b中的“ month”值是字符串(“ March”而不是“ 3”),因此也必须定义它。您可以尝试此查询,看看它是否有效。
SELECT * FROM (SELECT id,MONTH(CURRENT_DATE) AS "curMonth" FROM A) a LEFT JOIN B ON a.id=b.id AND curmonth=MONTHNAME(STR_TO_DATE(b.month,'%b'));
您也可以使用该查询。假设您想提前查看一个月或一个月,可以添加INTERVAL
条件。这种情况也可以满足当月的情况。
SELECT * FROM (SELECT id,MONTH(DATE_SUB(CURRENT_DATE, INTERVAL 0 MONTH)) AS "curMonth" FROM A) a LEFT JOIN B ON a.id=b.id AND curmonth=MONTHNAME(STR_TO_DATE(b.month,'%b'));
对于当前日期的上个月数据,您可以更改为INTERVAL 1 MONTH
,对于当前月份的数据,您可以更改为INTERVAL 0 MONTH
,对于提前1个月的数据,您可以更改为INTERVAL -1 MONTH
。
答案 2 :(得分:-1)
尝试:
SELECT * FROM TableA WHERE id NOT IN (SELECT id FROM TableB)
这将从TableA中获得不在tableB中的所有行。
这在SQL Server中有效,但是我不确定MySQL。