The Community will be temporarily unavailable starting on Friday February 28. We’ll be back as soon as we can! To learn more, check out our Announcements blog post.
Aug 23, 2021 11:38 AM
So I have a table with a field Client
that references a record from another table. Client
column as such can contain a value such as ['rec1234abc']
. Now I want to do a filter to return all records that reference a specific record. I tried this (using the Python client):
my_table.get_all(formula="ARRAYJOIN(Client, '')='rec1234abc'")
But that returns me no results. How can I accomplish this?
Solved! Go to Solution.
Aug 23, 2021 10:11 PM
Thank you for your clarification @Justin_Barrett.
Based on your answer then the following should work and we don’t need a formula here:
my_table.search("Client", "rec1234abc")
However, this also returns empty. Maybe I’m missing something here. Can we reference a reference field only using a formula?
Also your answer suggests using ARRAYJOIN
and then it goes ahead and doesn’t use it in query.
Aug 23, 2021 09:55 PM
When referencing the data from a link field using the API, what you get back might be an array of record IDs. However, that’s not what comes back when referencing a link field in an Airtable formula, and the last part of that statement is key: you need to design your formula based on how the actual formula would operate within Airtable, not based on how you get data back from the API.
A common misconception is that a formula referencing a link field will return an array of values, but that’s not the case. What Airtable returns from a link field is simply a string containing the text from the primary field of all linked records, separated by commas.
To get the record ID of the linked record, you’ll need to first make a {Record ID}
field in your [Clients]
table (guessing the name based on the {Client}
link field), roll that up in the table where the {Client}
link field lives—I’ll call this rollup field {Client Record ID}
, and suggest using ARRAYJOIN(values, "")
as the aggregation formula so that you get a string—and then compare against that in your API call:
my_table.get_all(formula="{Client Record ID}='rec1234abc'")
Aug 23, 2021 10:11 PM
Thank you for your clarification @Justin_Barrett.
Based on your answer then the following should work and we don’t need a formula here:
my_table.search("Client", "rec1234abc")
However, this also returns empty. Maybe I’m missing something here. Can we reference a reference field only using a formula?
Also your answer suggests using ARRAYJOIN
and then it goes ahead and doesn’t use it in query.
Aug 23, 2021 10:54 PM
First off, the field type is a link field, not a reference field. You’re creating a link between records across specific tables.
That aside, I’m not sure how the Python client operates (it’s not an official Airtable offering as far as I know), so I can’t offer much help with the specifics of the implementation. For example, what data types does the search
method expect and return? Are you sure that searching a link field returns the record IDs of the linked records? It’s possible that it’s returning the primary field text (similar to a formula), so searching that text for a record ID won’t work.
That’s because it’s used in the aggregation formula of the rollup field that I described. I rewrote the formula in the query to look at the output of that rollup field, which is going to be the string created by the aggregation formula.