Database 在数据库中连接多个表
假设我有以下型号:Database 在数据库中连接多个表,database,haskell,yesod,Database,Haskell,Yesod,假设我有以下型号: User ident Text password Text Maybe UniqueUser ident deriving Typeable Payment timestamp UTCTime from UserId to UserId receiptId ReceiptId ReceiptUser userId UserId receiptId Rece
User
ident Text
password Text Maybe
UniqueUser ident
deriving Typeable
Payment
timestamp UTCTime
from UserId
to UserId
receiptId ReceiptId
ReceiptUser
userId UserId
receiptId ReceiptId
Receipt
owner UserId
money Int
我想执行如下查询:
SELECT ReceiptUser.UserId, Receipt.ReceiptOwner, Receipt.Id, Receipt.Price
FROM ReceiptUser, Receipt, Payment
WHERE ReceiptUser.ReceiptId == Receipt.Id
AND NOT (Payment.ReceiptId == Receipt.Id AND Payment.From == ReceiptUser.UserId AND Payment.To == Receipt.Owner)
它应该查找尚未向其他用户付款的所有用户,以及相应的收据信息
我怎样才能用Yes来表达呢?在我看来,persistent只为一个表上的简单查询提供了一个接口。persistent的接口非常简单,通常不足以实现甚至稍微复杂的SQL。是一个位于Persistent数据库机器之上的库,它为您提供了一个更像Haskell DSL的SQL,可以让您表达所需内容。Persistent的界面非常简单,通常不足以实现哪怕是稍微复杂的SQL。是在Persistent数据库机器上的一个库构建,它提供了一个更像Haskell DSL的SQL,可以让您表达您所寻找的内容。由于您正在执行与我相同的任务,我想让您指向启动框架根目录中的manytomy.hs文件。
它包含两个关键函数:joinTables和joinTables3,它们将基于给定的键连接表。getPaymentsR下的/Handler/Payment.hs中给出了使用后者的示例。使用该功能,您应该能够进行连接,以便结果为[(实体接收方用户、实体接收方、实体支付)] 由于您所做的作业与我所做的作业相同,因此我想向您指出起始框架根目录中的ManyToMany.hs文件。
它包含两个关键函数:joinTables和joinTables3,它们将基于给定的键连接表。getPaymentsR下的/Handler/Payment.hs中给出了使用后者的示例。使用该功能,您应该能够进行连接,以便结果为[(实体接收方用户、实体接收方、实体支付)] 我很乐意使用埃斯奎莱托。然而,在我当前的作业中,我必须只使用YesSOD。我看到YesSOD提供了一种使用原始SQL的方法。你会推荐使用它吗?这是可能的,尽管我从未使用过Persistent的原始SQL功能,所以我个人不能推荐它。我会尝试一下。谢谢。我很乐意用埃斯奎莱托。然而,在我当前的作业中,我必须只使用YesSOD。我看到YesSOD提供了一种使用原始SQL的方法。你会推荐使用它吗?这是可能的,尽管我从未使用过Persistent的原始SQL功能,所以我个人不能推荐它。我会尝试一下。谢谢,是的,谢谢。我知道了这些是如何工作的,所以我现在差不多完成了作业。是的,谢谢。我知道了这些是如何工作的,所以我现在差不多完成了作业。