【问题标题】:Complex JOIN with ServiceStack OrmLite使用 ServiceStack OrmLite 进行复杂的 JOIN
【发布时间】:2017-04-06 10:12:23
【问题描述】:

我如何表达下面的查询(来自this question):

SELECT c.*, p1.*
FROM customer c
JOIN purchase p1 ON (c.id = p1.customer_id)
LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND 
    (p1.date < p2.date OR p1.date = p2.date AND p1.id < p2.id))
WHERE p2.id IS NULL;

使用 OrmLite SelectJoin API?

【问题讨论】:

    标签: c# sql-server ormlite-servicestack


    【解决方案1】:

    不幸的是,您的多表自表连接过于复杂,无法在 OrmLite 的 Typed API 中表达,因此您需要下拉到自定义 SQL,例如:

    var results = db.Select<Tuple<Customer,Purchase>>(@"SELECT c.*, 0 EOT, p1.*
        FROM customer c
        JOIN purchase p1 ON (c.id = p1.customer_id)
        LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND 
            (p1.date < p2.date OR p1.date = p2.date AND p1.id < p2.id))
        WHERE p2.id IS NULL;");
    
    results.PrintDump();
    

    我创建了一个Live Example of this you can play with on Gistlyn

    【讨论】:

    • 非常感谢。是否可以通过使用 API 添加其他 Where 子句来组合此查询?如果不是,那么传递可选 WHEREs 和 Limit(偏移量,行)参数的正确方法是什么?
    • @kolrie 你能问一个新问题吗?举个例子说明你想做什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多