mysql> select * from tr; +------+ | mnt | +------+ | jun | | mar | | jan | | aug | +------+ 4 rows in set (0.00 sec) mysql> select * from tr1; +------+------+ | mnt | id | +------+------+ | aug | 11 | | jan | 12 | | mar | 15 | | apr | 16 | +------+------+ 4 rows in set (0.00 sec) it worked for this query.. mysql> select * from tr join tr1 on tr.mnt=tr1.mnt; +------+------+------+ | mnt | mnt | id | +------+------+------+ | aug | aug | 11 | | jan | jan | 12 | | mar | mar | 15 | +------+------+------+ 3 rows in set (0.00 sec) mysql> select * from tr2; +------------+------+ | mn | id | +------------+------+ | 2009-02-14 | 11 | | 2009-03-03 | 12 | | 2009-08-08 | 12 | +------------+------+ 3 rows in set (0.00 sec) mysql> insert into tr2 values('2009-01-01',14); Query OK, 1 row affected (0.06 sec)
但它不适用于此..
mysql> select * from tr join tr2 on tr.mnt=MONTHNAME(tr2.mn); Empty set (0.00 sec)
请提供确切的查询..
答案 0 :(得分:1)
MONTHNAME(date)
返回一个varchar,所以“是” - 你可以比较它们。
请考虑以下语法:
select *
from A
join B on B.InvoiceMonth = MONTHNAME(A.Mnth);
答案 1 :(得分:0)
由于MONTHNAME()返回一个字符串而InvoiceMonth是一个字符串,因此您可以明智地比较它们。因此,在宽范围内,您的查询是可以的。不过,您应该使用现代的JOIN表示法:
SELECT *
FROM A
JOIN B ON B.InvoiceMonth = MONTHNAME(A.Mnth)
JOIN C ON B.InvoiceMonth = MONTHNAME(C.Monthx)
您不需要使用所有三个条件:如果X = Y且Y = Z,则X = Z。
当然,由于2011年1月的结果与2010年1月的结果不太可比,因此您确实需要找出年度信息的来源,并确保您不要混淆年。