2016-02-10 2 views
2

При выполнении фильтров-объединений в Slick в чем разница между капотом между двумя следующими способами?Scala Slick filter and join

val query = for { 
c <- coffees if c.price < 9.0 
s <- c.supplier -- assuming there is a foreign key 
} yield (c.name, s.name) 

и

val query = for { 
(cof, sup) <- coffees.filter(_.price < 9.0) join supplier on(_.supId === _.id) 
} yield (cof.name, sup.name) 

ответ

2

Первый неявное присоединиться и второе является явным присоединиться. Slick генерирует предложение WHERE для первого типа: WHERE c.price < 9 AND c.supId = s.id. Однако последний генерирует JOIN, как JOIN supplier s ON c.supId = s.id. Вы можете посмотреть на these examples.

+0

Хорошо, это мой ответ. возможно, я должен был спросить, почему вы хотели бы сделать один против другого. – Azeli

+1

Я думаю, что [это] (http://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-joins) будет ответом на ваш вопрос. – ulas