2017-02-09 2 views
0

Либо я не сфокусирован сегодня, либо документы «Начало работы» сглаживаются не очень хорошо. Таким образом, в разделе Запросы/Союзов они имеют этот фрагмент кода:Неверный пример в документах Slick?

val q1 = coffees.filter(_.price < 8.0) 
val q2 = coffees.filter(_.price > 9.0) 

val unionQuery = q1 union q2 
// compiles to SQL (simplified): 
// select x8."COF_NAME", x8."SUP_ID", x8."PRICE", x8."SALES", x8."TOTAL" 
//  from "COFFEES" x8 
//  where x8."PRICE" < 8.0 
// union select x9."COF_NAME", x9."SUP_ID", x9."PRICE", x9."SALES", x9."TOTAL" 
//  from "COFFEES" x9 
//  where x9."PRICE" > 9.0 

val unionAllQuery = q1 ++ q2 
// compiles to SQL (simplified): 
// select x8."COF_NAME", x8."SUP_ID", x8."PRICE", x8."SALES", x8."TOTAL" 
//  from "COFFEES" x8 
//  where x8."PRICE" < 8.0 
// union all select x9."COF_NAME", x9."SUP_ID", x9."PRICE", x9."SALES", x9."TOTAL" 
//  from "COFFEES" x9 
//  where x9."PRICE" > 9.0 

А потом они говорят: Unlike union which filters out duplicate values, ++ simply concatenates the results of the individual queries, which is usually more efficient.

Я думаю, что нет дубликатов продуцируемые q1 и q2. Таким образом, это либо неправильные примеры запросов, которые они предоставили, чтобы проиллюстрировать реальную разницу между union и ++, или я не получаю что-то важное. Не могли бы вы, ребята, помочь?

ответ

1

В этом конкретном случае нет дубликатов, так как нет перекрестка между q1 и q2. Возможно, изменение запросов к

val q1 = coffees.filter(_.price < 8.0) 
val q2 = coffees.filter(_.price < 9.0) 

было бы лучшим примером. Во всяком случае, в нижней строке это:

  • q1 union q2 переводит SQL UNION
  • q1 ++ q2 переводит SQL UNION ALL
Смежные вопросы