Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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 使用“选择”选择不在中的位置_Php_Sql_Laravel_Where Clause_Where In - Fatal编程技术网

Php 使用“选择”选择不在中的位置

Php 使用“选择”选择不在中的位置,php,sql,laravel,where-clause,where-in,Php,Sql,Laravel,Where Clause,Where In,我正在尝试在SQL SERVER中执行此选择 SELECT cast(datediff(DAY, min([fbh].FBH_DATA_INICIAL), CASE WHEN max([fbh].FBH_DATA_Final) = '9999-12-31' THEN cast(getdate() AS date)

我正在尝试在SQL SERVER中执行此选择


SELECT cast(datediff(DAY, min([fbh].FBH_DATA_INICIAL), CASE
                                                           WHEN max([fbh].FBH_DATA_Final) = '9999-12-31' THEN cast(getdate() AS date)
                                                           ELSE max([fbh].FBH_DATA_Final)
                                                       END)AS FLOAT) / CAST(365 AS FLOAT) AS duration
FROM [funcionario] AS [f]
INNER JOIN [funcionario_banda_historico] AS [fbh] ON [f].[FUN_ID] = [fbh].[FUN_ID]
AND [f].[FUN_BANDA] = [fbh].[FUN_BANDA]
WHERE NOT EXISTS
    (SELECT 1
     FROM funcionario_banda_historico t1
     WHERE t1.fun_id = [fbh].fun_id
       AND t1.FBH_DATA_INICIAL > [fbh].FBH_DATA_Final
       AND t1.FUN_BANDA <> [fbh].FUN_BANDA )
  AND [f].[FUN_ID] = '9999999'
GROUP BY f.fun_id,
         [f].[FUN_BANDA]

我正在尝试用where not in和select in LARAVEL进行选择

protected function getYearsInBand($userId) {
    $fbh = DB::table('funcionario as f')
            ->join('funcionario_banda_historico as fbh', function($join) {
                $join->on('f.FUN_ID', '=', 'fbh.FUN_ID');
                $join->on('f.FUN_BANDA', '=', 'fbh.FUN_BANDA');
            })
            ->selectRaw('cast(datediff(day,min([fbh].FBH_DATA_INICIAL),case when max([fbh].FBH_DATA_Final) = "9999-12-31" then cast(getdate() as date) else max([fbh].FBH_DATA_Final) end)AS FLOAT)/CAST(365 AS FLOAT) AS duration')
            ->where('f.FUN_ID', $userId)
            ->whereNotIn('1', function($q) {
                $q->select('*')
                ->from('funcionario_banda_historico as t1')
                ->where('t1.fun_id = [fbh].fun_id')
                ->where('t1.FBH_DATA_INICIAL > [fbh].FBH_DATA_Final')
                ->where('t1.FUN_BANDA <> [fbh].FUN_BANDA')
                ->get();
            })
            ->groupBy('f.FUN_ID', 'f.FUN_BANDA')
            ->first();
    
    if (!$fbh) {
        \Log::debug('funcionario_banda_historico not found'); // Grava no log
        return 0;
    }

    return $fbh->duration;
}
我的错误是列名“fun\u id=[fbh]”无效


你能帮帮我吗?

我认为Laravel中where子句的语法不正确。相反,你应该:

或:

注意,我还将fun_id改为大写,就像代码中的任何地方一样。我不知道[fbh]在Laravel中是否正确,请尝试只键入fbh。例如,您可能还需要以这种方式添加数据库前缀-DB::getTablePrefix

->whereRaw('t1.FUN_ID = fbh.FUN_ID')
->whereRaw('t1.FBH_DATA_INICIAL > fbh.FBH_DATA_Final')
->whereRaw('t1.FUN_BANDA <> fbh.FUN_BANDA')
->where('t1.FUN_ID', 'fbh.FUN_ID')
->where('t1.FBH_DATA_INICIAL', '>', 'fbh.FBH_DATA_Final')
->where('t1.FUN_BANDA', '<>', 'fbh.FUN_BANDA')