Java SQL查询生成器实用程序
我有一组列和表,在各自的下拉列表中,我正在编写一个代码,根据表列选择生成动态SQL 它适用于简单的Select语句,但在多个联接的情况下,我试图找出handlin Right和Left联接的语法 请帮助..这是SQL语法的错误Java SQL查询生成器实用程序,java,sql,sql-server,database,Java,Sql,Sql Server,Database,我有一组列和表,在各自的下拉列表中,我正在编写一个代码,根据表列选择生成动态SQL 它适用于简单的Select语句,但在多个联接的情况下,我试图找出handlin Right和Left联接的语法 请帮助..这是SQL语法的错误 1) (Select dbo.Employee.Dept_ID,dbo.Employee.Emp_ID,dbo.Employee.Emp_Name,dbo.Employee_DataVal.DeptNo, dbo.Employee_DataVal.EmpName,dbo.
1)
(Select dbo.Employee.Dept_ID,dbo.Employee.Emp_ID,dbo.Employee.Emp_Name,dbo.Employee_DataVal.DeptNo,
dbo.Employee_DataVal.EmpName,dbo.Employee_DataVal.EmpNo,dbo.Employee_DataVal.Salary,dbo.Emp_Sal.Emp_ID,dbo.Emp_Sal.Salary
FROM Employee
INNER JOIN Employee_DataVal
ON Employee.Dept_ID = Employee_DataVal.DeptNo
OR Employee_DataVal.EmpName = Employee.Emp_Name)
LEFT JOIN Emp_Sal
ON Employee.Emp_ID = Emp_Sal.Emp_ID
Incorrect syntax near the keyword 'LEFT'.
2)Select dbo.Employee.Dept_ID,dbo.Employee.Emp_ID,
dbo.Employee.Emp_Name,dbo.Employee_DataVal.DeptNo,
dbo.Employee_DataVal.EmpName,dbo.Employee_DataVal.EmpNo
,dbo.Emp_Sal.Emp_ID,dbo.Emp_Sal.Salary
FROM Employee INNER JOIN Employee_DataVal
ON Employee.Emp_ID = Employee_DataVal.EmpNo
AND Employee.Dept_ID = Employee_DataVal.DeptNo
LEFT JOIN Employee
ON Employee_DataVal.EmpName = Employee.Emp_Name
The objects "Employee" and "Employee" in the FROM clause have the same exposed names. Use correlation names to distinguish them.
PS:在sql server上运行此sql直接针对语法错误:
谈到您更广泛的问题,通用SQL查询生成器的概念非常常见,并且已经有了几个实现。在这样的论坛上,您不会找到完整的实施指南
干杯 直接与语法错误对话:
谈到您更广泛的问题,通用SQL查询生成器的概念非常常见,并且已经有了几个实现。在这样的论坛上,您不会找到完整的实施指南
干杯 您使用的左联接与自联接相同。这实际上造成了问题 您使用的左联接与自联接相同。这实际上造成了问题 在第一种情况下,由于错误的
)
出现错误,如下所示;这使得查询结束,因此左连接
抛出错误。)
必须位于查询的末尾
FROM Employee
INNER JOIN Employee_DataVal
ON Employee.Dept_ID = Employee_DataVal.DeptNo
OR Employee_DataVal.EmpName = Employee.Emp_Name ) <--Here
LEFT JOIN Emp_Sal
此外,LEFT JOIN Employee
在这里没有任何意义,可以简单地修改为下面的代码
FROM Employee emp1
INNER JOIN Employee_DataVal ed
ON emp1.Emp_ID = ed.EmpNo
AND emp.Dept_ID = ed.DeptNo
AND emp.Emp_Name = ed.EmpName <-- here by adding another join condition
来自员工emp1
内部联接雇员数据值
关于emp1.Emp_ID=ed.EmpNo
而emp.Dept_ID=ed.DeptNo
并且emp.emp_Name=ed.EmpName在第一种情况下,由于错误的)
位于错误的位置,出现错误,如下所示;这使得查询结束,因此左连接
抛出错误。)
必须位于查询的末尾
FROM Employee
INNER JOIN Employee_DataVal
ON Employee.Dept_ID = Employee_DataVal.DeptNo
OR Employee_DataVal.EmpName = Employee.Emp_Name ) <--Here
LEFT JOIN Emp_Sal
此外,LEFT JOIN Employee
在这里没有任何意义,可以简单地修改为下面的代码
FROM Employee emp1
INNER JOIN Employee_DataVal ed
ON emp1.Emp_ID = ed.EmpNo
AND emp.Dept_ID = ed.DeptNo
AND emp.Emp_Name = ed.EmpName <-- here by adding another join condition
来自员工emp1
内部联接雇员数据值
关于emp1.Emp_ID=ed.EmpNo
而emp.Dept_ID=ed.DeptNo
emp.emp_Name=ed.EmpName这是在字符串基础上处理复杂的动态SQL字符串时的常见问题-很难正确处理字符串形式的SQL语法,也很容易创建SQL注入漏洞
SQL builder API喜欢并非常适合此任务。我不确定您的问题到底是什么,但让我们假设最后一个左连接在您的查询中是可选的。您可以编写如下查询:
List t=员工
.join(员工数据值)
.on(员工部门ID.eq(员工数据部门)
.或(EMPLOYEE_DATAVAL.EMPNAME.eq(EMPLOYEE.EMP_NAME));
如果(某些条件){
t=t.leftJoin(EMP_SAL).on(EMPLOYEE.EMP_ID.eq(EMP_SAL.EMP_ID));
c、 addAll(Arrays.asList)(
EMP_SAL.EMP_ID,
EMP_SAL.薪水
));
}
结果=
ctx.选择(c)
.来自(t)
.fetch();
在以字符串为基础处理复杂的动态SQL字符串时,这是一个常见问题-很难正确处理字符串形式的SQL语法,也很容易创建SQL注入漏洞
SQL builder API喜欢并且非常适合此任务。我不确定您的问题到底是什么,但让我们假设最后一个左连接在查询中是可选的。您可以编写如下查询:
List t=员工
.join(员工数据值)
.on(员工部门ID.eq(员工数据部门)
.或(EMPLOYEE_DATAVAL.EMPNAME.eq(EMPLOYEE.EMP_NAME));
如果(某些条件){
t=t.leftJoin(EMP_SAL).on(EMPLOYEE.EMP_ID.eq(EMP_SAL.EMP_ID));
c、 addAll(Arrays.asList)(
EMP_SAL.EMP_ID,
EMP_SAL.薪水
));
}
结果=
ctx.选择(c)
.来自(t)
.fetch();
按照错误指示执行:-)给db一个临时名称,这样这个FROM Employee internal JOIN Employee_DataVal就变成FROM Employee e internal JOIN Employee_DataVal,然后只需在字段前面加上前缀,以便快速响应,正如我提到的,我必须构建一个动态查询,因此,如果用户在不同的表XTable之间从UI添加正确的连接,那么我该如何继续?语法方面,也是java编程方面的?按照错误所述操作:-)给db一个临时名称,因此这个FROM Employee internal JOIN Employee_DataVal变成FROM Employee e internal JOIN Employee_DataVal,然后只需在字段前加前缀,以便快速响应,正如我提到的,我必须构建一个动态查询,所以,在任何时刻,如果用户从UI在不同的表XTable之间添加了一个右连接,那么我应该如何继续?通用SQL查询生成器的概念