It does seem like the API would/should provide more array functions. Something like PHP’s in_array() function would be extremely useful. That and being able to access fields from linked records in a single query. But until then, here’s how I handle this scenario:
I would recommend not using the FIND function as it will match partial strings. Consider if you have two roles, “Pitcher” and “Pitcher’s Assistant”. You’ll never be able to use the FIND function to retrieve only “Pitcher” users as it will also match “Pitcher’s Assistant”.
I would recommend instead to do two queries: 1) to retrieve the records from the Roles table that match what you’re looking for. 2) to use the RECORD IDs from the Users field in the Roles records to construct a query that will return the full Users records.
So, if you wanted to get all users who are either Pitchers or Catchers you would use this filterByFormula on the Roles table:
OR(
{Name} = 'Pitcher',
{Name} = 'Catcher'
)
That returns a result set like:

In each of the returned records, you would have an array of RECORD IDs in the Users field for any linked records for that Role from the Users table. You could then construct a single query (or one query per role) for the Users table using a filterByFormula that looked a little something like this:
OR(
RECORD_ID() = 'recMzWnfK8wuT9MFZ',
RECORD_ID() = 'recdRonUzKAIMPOxb',
RECORD_ID() = 'recRjdJSziwMjfhO8',
)
You would then have two result sets, one for Roles and one for Users and both would be “filtered” by the Roles you initially queried from the Roles table. And if you need to additional filter based on number of roles (i.e. I only want Pitchers if that’s their ONLY role) you could use a COUNT field in the Users table and use this as your filterByFormula:
AND(
{Role Count} = 1,
OR(
RECORD_ID() = 'recMzWnfK8wuT9MFZ',
RECORD_ID() = 'recdRonUzKAIMPOxb',
RECORD_ID() = 'recRjdJSziwMjfhO8',
)
)
So, all that said, as long as you don’t think you’ll end up with the “Pitcher” and “Pitcher’s Assistant” issue, you still could do this using the FIND function as you initially did—all you were missing was the use of the AND or OR function:
OR(
FIND("Pitcher", Roles) > 0,
FIND("Left Fielder", Roles) > 0
)
You could use AND instead of OR to ensure the user has all the roles specified.
You can get even more complex with nested conditions. This will return users who are both Pitcher and Left Fielder OR catcher.
OR(
AND(
{Roles} = "Pitcher",
{Roles} = "Left Fielder"
),
{Roles} = "Catcher"
)

