sql где x = y и x = z и - PullRequest
       16

sql где x = y и x = z и

0 голосов
/ 11 мая 2019

@ Английский не мой родной язык.

У меня есть код (он работает):

@Query("select new java.entity.dto.ProductsDTO(" +
        "p," +
        "count(c)," +
        "sum(case when c.user = :user then 1 else 0 end) > 0," +
        "sum(case when cart.user = :user then 1 else 0 end) > 0," +
        "sum(case when wish.user = :user then 1 else 0 end) > 0) " +
        "from Products p " +
        "left join p.commentaries c " +
        "left join p.carts cart " +
        "left join p.wishLists wish " +
        "left join p.tags tags " +
        "where p.categories = :categories " +
        "and tags.id in :tags " +
        "group by p,:user")
Page<ProductsDTO> findAllByCategoriesAndTags(Pageable pageable, @Param("categories") Categories categories, @Param("user") User user, @Param("tags") List<Long> tags);

Когда я читаю эту часть, "tags.id =: tags" работает так: "id = tag1 или id = tag2 или id = tag3 ...".

Итак, как я могу написать что-то вроде этого: "id1 = tag1 или id1 = tag2 и id2 = tag1 или id2 = tag2"

1 Ответ

0 голосов
/ 12 мая 2019

Когда я читаю эту часть, "tags.id =: tags" работает следующим образом: " id = tag1 или id = tag2 или id = tag3 ...".

Итак, как мне написать что-то вроде этого: « id1 = tag1 или id1 = tag2 и id2 = tag1 или id2 = tag2 "

Просто добавьте еще один оператор AND после уже существующего:

    AND tags.id1 in :tags 
    AND tags.id2 in :tags

Я предположил, что вы имели в виду "(id1 = tag1 or id1 = tag2) and (id2 = tag1 or id2 = tag2)".Однако будьте осторожны с тем фактом, что логические операции И имеют приоритет над ИЛИ .Без скобок ваше выражение было бы проанализировано как "id1 = tag1 or (id1 = tag2 _and_ id2 = tag1) or id2 = tag2"…

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...