Question: How to join tables using join clause without listing all the fields?
Data
Given two tables, Person and Address:
Person
| name | address_id |
|---|---|
| Alice | 10 |
| Bob | 11 |
| Charlie | 10 |
Address
| id | street | city |
|---|---|---|
| 10 | William Street | NYC |
| 11 | Old Street | London |
Desired result:
I'd like to join them with a record, like so:
| name | address.street | address.city |
|---|---|---|
| Alice | William Street | NYC |
| Bob | Old Street | London |
| Charlie | William Street | NYC |
However, I have many columns in both tables and I don't want to specify them all.
So something a bit like using EXCEPT but with the joined columns becoming nested in an address record:
SELECT * EXCEPT (address_id)
FROM person p
JOIN address a
ON p.address_id = a.id
Is this possible in BigQuery?
CodePudding user response:
Consider below query:
SELECT p.* EXCEPT(address_id), (SELECT AS STRUCT a.* EXCEPT(id)) AS address
FROM Person p JOIN Address a ON p.address_id = a.id;
output:

