Php Sql错误为“0”;“语法不正确”=&引用;
在这个sql中,我只想签入“ON”子句b.block='False'。因为有时“profileview”表值是空的。 我只想,如果用户_fullinfo值在profileview中与此条件b.block='False'匹配,则应显示,如果值在profileview中不存在,则也应显示Php Sql错误为“0”;“语法不正确”=&引用;,php,sql,sql-server,sql-server-2008,Php,Sql,Sql Server,Sql Server 2008,在这个sql中,我只想签入“ON”子句b.block='False'。因为有时“profileview”表值是空的。 我只想,如果用户_fullinfo值在profileview中与此条件b.block='False'匹配,则应显示,如果值在profileview中不存在,则也应显示 SELECT a.* FROM user_fullinfo a left join profileview b on CASE WHEN a.id=b.rid and b.rid='105' THEN b.bl
SELECT a.* FROM user_fullinfo a left join profileview b on
CASE
WHEN a.id=b.rid and b.rid='105' THEN
b.block='False'
END
where gender != 'Male' and (DATEDIFF(YY,dob,GETDATE()) Between '10' and '100') and (a.heightid between 58 and 65) and( a.complexionid = '3' or a.complexionid = '4' or a.complexionid = '5') and a.bodytypeid = '4' and a.marital_statusid = '3'
它表示sql错误(102)“=”附近的语法不正确。。
请给出解决方案。布尔表达式不适合作为值,例如
案例的值。我的建议是完全删除案例
,只使用布尔逻辑。大概是这样的:
select a.*
from user_fullinfo a left join
profileview b
on (a.id = b.rid and b.rid = '105' and b.block = 'False') or
( not (a.id = b.rid and b.rid = '105' and b.block = 'False') and
gender <> 'Male' and (datediff(year, dob, getdate()) Between 10 and 100) and
(a.heightid between 58 and 65) and
(a.complexionid in (3, 4, 5)) and
a.bodytypeid = 4 and a.marital_statusid = 3
);
选择一个*
从用户_fullinfo左连接
剖面视图b
on(a.id=b.rid和b.rid='105'和b.block='False')或
(非(a.id=b.rid和b.rid='105'和b.block='False')和
性别“男性”和(datediff(年份、出生日期、getdate())介于10和100之间)和
(a.高度介于58和65之间)和
(a)(3,4,5)中的络合剂
a、 bodytypeid=4和a.U状态ID=3
);
注:
- SQL中SQL不等式的标准是
,尽管=代码>也被广泛接受
- 不要在数值常量周围使用单引号<“10”和“100”之间的代码>与“10”和“100”之间的代码>不同
- 我怀疑这个版本或你的
案例
版本是否真的符合你的要求。对于第二种情况,两个表之间没有相关性
这将解决您的语法问题。逻辑问题是另一个问题。我建议您提出另一个问题,包括示例数据、所需数据、结果和逻辑解释。如果您在case语句中只有1个条件,您可以使用直接连接,如下所示
SELECT
a.*
FROM user_fullinfo a
LEFT JOIN profileview b
ON a.id = b.rid
AND b.rid ='105'
AND b.block ='False'
WHERE gender <> 'Male'
AND (DATEDIFF(YY,dob,GETDATE()) BETWEEN '10' AND '100')
AND (a.heightid between 58 and 65)
AND
(
a.complexionid = '3'
OR
a.complexionid = '4'
OR
a.complexionid = '5'
)
AND a.bodytypeid = '4'
AND a.marital_statusid = '3'
为什么这里标记了mysql
?该语句是mysql语法,无法识别我的sql Server连接条件在哪里?我得到了下面的答案,谢谢。。
ON
(
(
a.id = b.rid
AND b.rid ='105'
AND b.block ='False'
)
OR
(
a.id = b.rid
AND b.rid ='105'
AND b.block ='True'
)
)