Skip to content

SQL JOIN with nested subquery/ies #9

@atrost

Description

@atrost

It seems Scuttle cannot handle queries with a subquery inside a JOIN. The following example uses only one level of nesting:

SELECT c.id, c.name, t.status 
FROM campaigns c														 
LEFT OUTER JOIN (													        
    SELECT campaigns.id, campaign_approvals.status as status                				 
    FROM campaigns													 
    LEFT OUTER JOIN  campaign_approvals on campaign_approvals.campaign_id = campaigns.id					 
    LEFT OUTER JOIN  users on  campaign_approvals.user_id = users.id							 
    WHERE (approval_type = 'publisher_approval' AND (status = 'approved' OR status = 'declined') AND archived IS FALSE)		
 ) t on c.id=t.id														 
GROUP BY c.id, t.status  

Scuttle turns this to:

Campaign.select(
  [
    C.arel_table[:id], C.arel_table[:name], T.arel_table[:status]
  ]
).joins(
  Campaign.arel_table.join(User.arel_table, Arel::Nodes::OuterJoin).on(
    CampaignApproval.arel_table[:user_id].eq(User.arel_table[:id])
  ).join_sources
).group(C.arel_table[:id], T.arel_table[:status])

The nested SELECT inside the LEFT OUTER JOIN statement gets ignored..

Scuttle does recognize subquery patterns like this:

SELECT  t.id, t.name, ...  
   FROM ( a.id, a.name,...
	SELECT ...
        FROM sometable a
  ) t

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions