日期:2014-05-17  浏览次数:20570 次

表连接处理字符串问题
如题:

现在有一张表zone,要连接的是两张表,left join

但有条件,根据条件不同只能连接一张表,但要写成一条sql



SELECT *
FROM dbo.[zone] z LEFT OUTER JOIN
      dbo.property_info pi ON LEFT(z.spare2, 1) = 'P' AND CONVERT(int, 
      REPLACE(z.spare2, 'P', '')) = pi.ID LEFT OUTER JOIN
      community_info ci ON LEFT(z.spare2, 1) = 'C' AND CONVERT(int, REPLACE(z.spare2, 
      'C', '')) = ci.id LEFT OUTER JOIN



zone的spare2字段存的内容 字符串类型,如P456,C567等

意思是P的时候连接一个表,C的时候连接一个表,不能同时连接

小弟调试了半天,差了半天,总是报将varchar2 P456转int出错


望sql大牛指点小弟一二

------解决方案--------------------
写两条sql再union起来
------解决方案--------------------
存储过程分步实现吧,非要写无比复杂语句与自己过不去?

------解决方案--------------------
SELECT *
FROM dbo.[zone] z LEFT OUTER JOIN
      dbo.property_info pi CONVERT(int, 
      REPLACE(z.spare2, 'P', '')) = pi.ID 
where  LEFT(z.spare2, 1) = 'P' union 
SELECT *
FROM dbo.[zone] z LEFT OUTER JOIN
      community_info ci ON LEFT(z.spare2, 1) = 'C' AND CONVERT(int, REPLACE(z.spare2, 'C', '')) = ci.id 
where LEFT(z.spare2, 1) = 'C'