SELECT IF(B.z IS NULL,
C.LOGO_FILE,
E.LOGO_FILE) AS LOGO_FILE
FROM A
LEFT OUTER JOIN B AS B
ON A.x = B.x
LEFT OUTER JOIN C AS C
ON B.x = C.x
AND B.y = C.y
LEFT OUTER JOIN B AS D
ON B.z = D.x
LEFT OUTER JOIN C AS E
ON D.x = E.x
AND D.y = E.ySQL大致使上面样子,难点在于【LOGO_FILE】这个字段在数据库中是longblob类型(存的是一个图片)
当使用IF判断时【LOGO_FILE】这个字段就会被取出为文字列,
如果单独执行select LOGO_FILE from B 那么是没有问题的,查出来的这个字段是longblob类型的,
问题是用一个sql语句执行出来,而且要取出【LOGO_FILE】字段仍为longblob类型的sql该怎么写,
【CASE
WHEN B.z IS NULL THEN C.LOGO_FILE
ELSE E.LOGO_FILE
END AS LOGO_FILE2】
这个我试过了,取出来的也是文字列类型,不是longblob类型。
问题大致就是这样,请教高手帮助,谢谢了。
C.LOGO_FILE,
E.LOGO_FILE) AS LOGO_FILE
FROM A
LEFT OUTER JOIN B AS B
ON A.x = B.x
LEFT OUTER JOIN C AS C
ON B.x = C.x
AND B.y = C.y
LEFT OUTER JOIN B AS D
ON B.z = D.x
LEFT OUTER JOIN C AS E
ON D.x = E.x
AND D.y = E.ySQL大致使上面样子,难点在于【LOGO_FILE】这个字段在数据库中是longblob类型(存的是一个图片)
当使用IF判断时【LOGO_FILE】这个字段就会被取出为文字列,
如果单独执行select LOGO_FILE from B 那么是没有问题的,查出来的这个字段是longblob类型的,
问题是用一个sql语句执行出来,而且要取出【LOGO_FILE】字段仍为longblob类型的sql该怎么写,
【CASE
WHEN B.z IS NULL THEN C.LOGO_FILE
ELSE E.LOGO_FILE
END AS LOGO_FILE2】
这个我试过了,取出来的也是文字列类型,不是longblob类型。
问题大致就是这样,请教高手帮助,谢谢了。
select C.LOGO_FILE,E.LOGO_FILE from e,c 结果如何
结果都是longblob类型的
只是要进行判断之后就取不到longblob类型的了
The default return type of a CASE expression is the compatible aggregated type of all return values, but also depends on the context in which it is used. If used in a string context, the result is returned as a string. If used in a numeric context, then the result is returned as a decimal, real, or integer value. 估计在判断后自动设置为 string型了
尝试一下
cast(IF(B.z IS NULL,C.LOGO_FILE,E.LOGO_FILE) as binary)