I tried :

WITH posts_tags_cte AS (
        SELECT post_id, array_agg(tag_id) as tags
        FROM posts_tags
        WHERE tag_id in (1, 2)
        GROUP BY post_id
)
SELECT posts.id FROM posts_tags_cte JOIN posts ON posts.id = 
posts_tags_cte.post_id
WHERE posts_tags_cte.tags @> array[1, 2]::int8[]

But it gives me all the posts.


Thanks,

Arup Rakshit
[email protected]



> On 12-Sep-2018, at 9:14 PM, Arup Rakshit <[email protected]> wrote:
> 
> Can you show me the SQL construction? Do I need to use `WITH`?
> 
> 
> Thanks,
> 
> Arup Rakshit
> [email protected] <mailto:[email protected]>
> 
> 
> 
>> On 12-Sep-2018, at 9:13 PM, David G. Johnston <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> On Wednesday, September 12, 2018, Arup Rakshit <[email protected] 
>> <mailto:[email protected]>> wrote:
>> IN is OR, I want the AND logic. Select posts which has tag 1, 2 and 3 ( tag 
>> ids )
>> 
>> Build arrays and then use the “contains” operator.
>> 
>> David J. 
> 

Reply via email to