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类型。
问题大致就是这样,请教高手帮助,谢谢了。

解决方案 »

  1.   

    C.LOGO_FILE、E.LOGO_FILE均为longblob类型?
    select C.LOGO_FILE,E.LOGO_FILE from e,c 结果如何
      

  2.   

    恩是的,LOGO_FILE两个表的这个字段都是longblob类型的select C.LOGO_FILE,E.LOGO_FILE from e,c 结果如何
    结果都是longblob类型的
    只是要进行判断之后就取不到longblob类型的了
      

  3.   

    MYSQL HELP:
    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型了
      

  4.   

    longblob类型是一种特殊的字符串类型。参考手册里是把它放在字符串类型里面介绍的。可能是进行了隐士转换,所以你看到了字符串。
      

  5.   

    被转化成了string,
    尝试一下
    cast(IF(B.z IS NULL,C.LOGO_FILE,E.LOGO_FILE) as binary)
      

  6.   

    longblob 无法在普通的SQL查询中实现,只能通过程序接口访问。