1
Slick 2.0中有沒有一種方法可以在表類上創建一個方法,該方法可以生成SQL JOIN語法而不僅僅是一個WHERE子句?在Slick 2.0中使用SQL JOIN語法而不是WHERE進行篩選
使用類似文件的例子:
class Suppliers(tag: Tag) extends Table[(Int, String)](tag, "SUPPLIER") {
...
def suppliedCoffees = coffees.filter(_.supplierId == id)
def * = (id, name)
}
class Coffees(tag: Tag) extends Table[(Int, Int, String)](tag, "COFFEES") {
...
def * = (id, supplierId, name)
}
我可以創建suppliedCoffees
方法,並用它作爲這樣的:
for {
s <- suppliers
c <- s.suppliedCoffees
} yield (s.name, c.name) ...
尼斯和整潔 - 容易閱讀,並連接標準很好地隱藏起來。但是這會生成一個SQL WHERE子句。我怎麼能做類似於以下的事情,但使用像suppliedCoffees
這樣的方法,以便它封裝在類中?
for {
(s, c) <- suppliers innerJoin coffees on (_.id === _.supplierId)
} yield (s, c) ...
或者更好的是,我該怎麼做一個外連接? (但作爲一種方法,如suppliedCoffees
)
for {
(s, c) <- suppliers leftJoin coffees on (_.id === _.supplierId)
} yield (s.name, c.name.?) ...
在此先感謝。
乾杯, Rob。
p.s.油滑真棒!它確實使得使用SQL數據庫的樂趣:)
感謝您的回覆。所以我不得不使用隱式類?有沒有一種方法可以使它像我的示例中的'suppliedCoffees'方法一樣簡單(即,僅使用'filter') – headexplodes
這看起來目前已經破裂。我添加了一個測試用例:'https:// github.com/slick/slick/pull/689'。爲什麼要在where語法上使用SQL連接語法? – cvogt
這真的是一個很好的問題:)所以我可以做外部連接,併爲了與其他數據庫查詢的一致性,我猜。我假設在內連接的情況下,它會在大多數數據庫中執行與WHERE子句相同的操作。 Query(this).join ...是我以前的樣子(雖然我可能要等),而隱式類方法似乎也適用於我。謝謝你的幫助! – headexplodes