Guide · Jira Cloud

Nested JQL queries on Jira Cloud: subqueries, the 1,000-value limit and complete results

Plain JQL cannot take a query as an argument. Apps add subqueries through JQL functions, and Atlassian caps what a function may return. Here is how it works, and a simple test that tells you whether a nested result is complete.

Published 2026-10-17 · Facts checked 2026-10-17 · By ArtUp Labs, the maker of ArtUp Query

Short answer. Plain JQL on Jira Cloud has no subqueries. Apps add them through JQL functions, and Atlassian's platform rejects a function that returns more than 1,000 values for one JQL fragment. A well-built function either avoids the list (it returns a condition instead) or tells you it cannot answer. You can test any function against plain JQL on a case where you know the answer.

1. Plain JQL has no subqueries

Fields such as parent and functions such as linkedIssues() take keys, not a query. Sources: JQL fields, JQL functions, checked 2026-10-17. So these do not work:

parent in (project = ABC AND status = Done)          -- error
issue in linkedIssues(filter = 10001)                -- error

Measured On our test site on 2026-10-17, Jira answered the first one with Expecting ',' or ')' but got '='. The workaround without apps is to run the inner query, copy its keys and paste them into the outer one — see subtasks of the issues in a filter.

2. How app functions add subqueries, and the 1,000-value limit

On Jira Cloud, an app's JQL function is called by Jira with its arguments and returns something Jira can search on: a list of values (for example work item keys) or a JQL condition. Atlassian documents a hard limit for the list: when a function returns more than 1,000 values for a JQL fragment, validation fails before the search runs and the user sees

Function '{function_name}' provided by '{app_name}' has returned more than the maximum of 1000 values for this JQL fragment.

Atlassian's recommended way around it is to return a JQL condition on queryable data instead of a list of keys. Source: Atlassian Developer, Working around the JQL 1000 limit, checked 2026-10-17.

What it means when you use any JQL function app:

  • An error that names a maximum is honest: the function could not answer, and you can narrow the inner query.
  • Be careful with a result that is suspiciously round, or that stops growing when the inner query grows. Check it before you build a report or an automation on it.

3. How to check that a nested result is complete

Pick a case where plain JQL can compute the same answer, and compare the counts.

Function queryPlain JQL with the same answerWhy they match
issue in subtasksOf("project = ABC")project = ABC AND issuetype in subTaskIssueTypes()A subtask is in the project of its parent.
issue in subtasksOf("key in (ABC-1, ABC-2)")parent in (ABC-1, ABC-2)The same keys, written out.
issue in linkedIssuesOf("key = ABC-1")issue in linkedIssues(ABC-1)The built-in function takes one key.

Then grow the inner query past 1,000 work items and compare again. For a project with several thousand subtasks, the first row is a quick check of a function at scale.

Measured On our test site on 2026-10-17, with ArtUp Query, all three rows matched: 7 and 7 subtasks for the project, 3 and 3 for two keys, 1 and 1 linked work item.

4. Writing nested functions

Inside an argument, escape quotes with a backslash. Functions can take other functions:

issue in subtasksOf("issue in linkedIssuesOf(\"key = ABC-1\", \"blocks\")")

Keep the innermost query as narrow as you can: every level reads the work items of the level below it.

5. How ArtUp Query handles large results

ArtUp Query is our JQL function app for Jira Cloud. When a result cannot be returned in full, the JQL editor shows The result needs n issues; one function returns at most m — never a shorter list.

Measured On a test site with 50,000 issues, every function matched a reference computed by walking the Jira REST API: 24 of 24 checks of the functions computed on request, 85 of 85 checks of the site index (links, hierarchy and sprint history, including a sprint of 1,093 issues) and 17 of 17 checks of comments, attachments and field comparison.

Honest limits: how many issues one function can read depends on the function and on Jira's API allowance for apps. Results follow Jira's change events within Jira's API allowance for apps: on our test site a changed link showed in the result in about 15 seconds while the hour's allowance had room; with about 100 functions in use the 90th percentile was about 277 seconds. Bulk edits beyond the hour's allowance wait for the next half hour or hour. A subquery runs with the app's access, not the user's; Jira still hides work items the user cannot see, but read the limits in the documentation before you use it on projects with restricted access.

Video: ArtUp Query demo, 2:24, with captions, recorded on our test site in October 2026: the function reference, three searches with functions, an error message in the JQL editor and the admin settings.

Subqueries in the ordinary Jira search

ArtUp Query adds subtasksOf, parentsOf, linkedIssuesOf, childIssuesOf and 20 more JQL functions that take any JQL or saved filter as their argument.

ArtUp Query is on the Atlassian Marketplace. Sites with up to 10 users use it free.