原来的sql:
SELECT e.answer AS answer1,e.created,m.id,m.email,m.nick_name,buy_type, 
   `prefecture`.`name` AS prefecture_name, 
   `city`.NAME AS city_name,
    pre.name AS prefecture_name,
   pre_city.name AS city_name 
FROM enquete_answer_info e 
   LEFT JOIN member_info m ON e.member_id=m.id 
   LEFT JOIN city_mst prefecture ON m.prefecture=prefecture.id 
   LEFT JOIN city_mst pre ON m.corporate_prefecture=pre.id 
   LEFT JOIN city_mst pre_city ON m.corporate_city=pre_city.id 
   LEFT JOIN city_mst city ON m.city=city.id 
   WHERE enquete_id=113------------------------------------------
结果---------------------------------------------------------------answer1 created id email nick_name buy_type prefecture_name city_name  prefecture_name city_name
旭日初升 2009-12-15 19:23:32 113 [email protected] keynes 1 \N \N 娄底市 娄底市
清晨的露水 2009-12-15 19:23:32 113 [email protected] keynes 1 \N \N 娄底市 娄底市
--------------------------------------------其中buy_type是个字段,要么是1(个人),要么是2(法人),prefecture_name存储的是个人的省份,city_name 存储的是个人的城市,在结果集里面的第二个prefecture_name ,city_name存储的是法人的信息,,,因为两类人存储的字段不一样,所有查询的时候只用通过指定相同别名....
我就想把空的哪个有值查询哪个,也就是动态查询...------------------------------------------
DELIMITER //
CREATE PROCEDURE proc_chax()
BEGINSELECT e.answer AS answer1,e.created,m.id,m.email,m.nick_name,buy_type,
CASE 
  WHEN buy_type==1 THEN   
   `prefecture`.`name` AS prefecture_name, 
   `city`.NAME AS city_name,
  WHEN buy_type==2 THEN    
   
   
    pre.name AS  prefecture_name,
   pre_city.name AS city_name 
   
END 
FROM enquete_answer_info e 
   LEFT JOIN member_info m ON e.member_id=m.id 
   LEFT JOIN city_mst prefecture ON m.prefecture=prefecture.id 
   LEFT JOIN city_mst pre ON m.corporate_prefecture=pre.id 
   LEFT JOIN city_mst pre_city ON m.corporate_city=pre_city.id 
   LEFT JOIN city_mst city ON m.city=city.id 
   WHERE enquete_id=113
END
这样写好像不可以......