【问题标题】:union not working empty results工会不工作空结果
【发布时间】: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 在 vi​​sit_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 FROM orders 加入经销商 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 注入攻击。

标签: mysql sql sqlite


【解决方案1】:

经过几天的研究终于得到了答案。使用 LEFT JOIN 和 OR 仅从匹配的表中获取数据。


sql="" +
        "SELECT DISTINCT order_id, order_date, order_status, order_value, order_sapId, order_from, order_clientAcct, order_error, order_visitId, order_cancelled, distributor_name " +
        " FROM `orders` " +
        " LEFT JOIN visits,user,distributor  ON  (visit_id = order_visitId AND user_id = visit_userId AND  distributor_id = visit_outlet_id AND order_from = 'CSFA' AND user_id = '"+ App.getUserData("user_id")+"') OR " +
        " " +
        " ( order_clientAcct = distributor_accountName AND salesEmpNo = user_sapId AND order_from = 'SAP' AND user_id = '"+ App.getUserData("user_id")+"' )" +
        " " +
        "ORDER BY order_id DESC LIMIT 100" +
        "";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多