我有两张桌子。我需要比较两个值,但它们在两个表中都有不同的数据类型。在一个表中,它是int,在另一个表中,它是varchar。我尝试将varchar与cast()一起使用,但是cast()不能与varchar一起使用。
我的查询如下:
select user.username, user_follow.object_id from user,user_follow
left join user_follow
ON cast(user_follow.object_id as varchar(25))= user.username
WHERE user.username= cast(user_follow.object_id as varchar(25));
请帮助。 感谢。
答案 0 :(得分:2)
“:不起作用:”是对观察到的行为的不精确描述。
我们希望MySQL根据规范“工作”,我们期望MySQL的行为返回特定的错误消息,例如1064.
Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near VARCHAR
我们希望出现错误消息,因为根据MySQL参考手册, VARCHAR
不是CAST的有效类型,但 CHAR
是
参考:
http://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert
注:
这不是查询的唯一问题。
似乎有两个对user_follow
表的引用;并且至少有一个引用需要分配一个表别名。
查询还使用旧式逗号语法进行连接操作,另一个连接操作使用较新的JOIN关键字。
如果没有返回结果集的规范,我们就是 “猜测”您实际想要运行的查询。我在猜...
SELECT u.username
, f.object_id
FROM user u
LEFT
JOIN user_follow f
ON CONVERT(CHAR(25),f.object_id) = u.username
答案 1 :(得分:0)
您应该cast
作为CHAR
数据类型,没有可以投射数据的varchar
数据类型,无论如何请尝试这样:)
不确定要使用的内容,left join
或join
。
select u.username, uf.object_id from user u
left join user_follow uf
ON cast(uf.object_id as char(25))= cast(u.username as char(25))
-- WHERE cast(u.username as char(25)) = cast(uf.object_id as char(25));
或者
select u.username, uf.object_id from user u, user_follow uf
-- left join user_follow uf
-- ON cast(uf.object_id as char(25))= cast(u.username as char(25))
WHERE cast(u.username as char(25)) = cast(uf.object_id as char(25));
答案 2 :(得分:0)
您可以使用 CONCAT(user_follow.object_id)