Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Sql错误为“0”;“语法不正确”=&引用;_Php_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Php Sql错误为“0”;“语法不正确”=&引用;

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

在这个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.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' 
  )
)