如题:
现在有一张表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'