【发布时间】:2016-11-24 16:48:54
【问题描述】:
我尝试使用内部联接和联合不起作用
sql="SELECT * FROM " +
"(SELECT order_id, order_date, order_status, order_value, order_sapId, order_from, order_clientAcct, order_error, order_visitId, order_cancelled, distributor_name " +
" FROM `orders` " +
" JOIN visits on visit_id = order_visitId " +
" JOIN Name ON user_id = visit_userId " +
" JOIN distributor ON distributor_id = visit_outlet_id " +
" WHERE order_from = 'CSFA' AND user_id = '"+ App.getUserData("user_id")+"' " +
")" +
" JOIN " +
"(SELECT order_id, order_date, order_status, order_value, order_sapId, order_from, order_clientAcct, order_error, order_visitId, order_cancelled, distributor_name " +
" FROM `orders` " +
" JOIN distributor ON order_clientAcct = distributor_accountName " +
" JOIN user ON salesEmpNo = user_sapId " +
" WHERE order_from = 'u' AND user_id = '"+ App.getUserData("user_id")+"' " +
") " +
"" +
"ORDER BY order_id DESC LIMIT 100" +
"";
我需要一种方法来连接两个结果 1.尝试内连接 2.尝试联合
E/SQLiteLog: (1) "(" 附近: 语法错误 11-24 19:53:01.017 13531-13531/E/AndroidRuntime: 致命异常: main 进程:,PID:13531 android.database.sqlite.SQLiteException:靠近“(”:语法错误(代码1):,编译时:SELECT * FROM(SELECT order_id,order_date,order_status,order_value,order_sapId,order_from,order_clientAcct,order_error,order_visitId,order_cancelled,distributor_name FROM
orders在 visit_id = order_visitId 上加入访问 JOIN Name ON user_id = visit_userId 在distributor_id = visit_outlet_id 上加入经销商 WHERE order_from = 'CSFA' AND user_id = '75' ) UNION (SELECT order_id, order_date, order_status, order_value, order_sapId, order_from, order_clientAcct,order_error,order_visitId,order_cancelled,distributor_name FROMorders加入经销商 order_clientAcct =distributor_accountName 加入用户 salesEmpNo = user_sapId WHERE order_from = 'u' AND user_id = '75' ) ORDER BY order_id DESC LIMIT 100
那是错误日志
【问题讨论】:
-
“不工作”需要详细说明吗?错误信息?
-
它的sqlite检查了附近的语法(但联合在此之前
-
JOIN 和 UNION 做的事情完全不同。您不能简单地将随机 SQL 关键字填充到查询中并期望它起作用。而且您完全省略了对目标的描述、您的查询应该如何实现它、示例数据和所需的结果。
-
作为最佳实践,您应该考虑参数化您的查询。像你这样做内联变量可能适用于这个实例(因为它似乎来自可能是 int 类型的数据库记录),但这样做通常非常不安全,并且可能会使你的代码容易受到 SQL 注入攻击。