2 ms·
GP misunderstood what an "ambiguous join" is. Rather than a join that returns multiple results, they're more like when you have relationships like this [0]:
by Izkata 2y ago
GP misunderstood what an "ambiguous join" is. Rather than a join that returns multiple results, they're more like when you have relationships like this [0]:
user.residence1 -> country
user.residence2 -> country
user.join(country)
You have to specify somewhere which foreign key to follow, it can't be figured out automatically. GP's suggestion doesn't work because there's no way to automatically determine which one to use.
I'm only really familiar with Django, and it handles this type of thing by making you specify the "residence1" name instead of the table name "country".
[0] To refer back to the top of this comment chain, that user is complaining they can't do something like also have a "country->continent" relationship and do "user.join(continent)" and have the system figure out the two joins needed.
- rawgabbit 2y agoPutting on my dogmatic 3NF purist hat. Instead of denormalized user.residence1 -> country.id user.residence2 -> country.id I would create a many to many bridge table. To accommodate multiple residences for a given user. bridge.userid-> user.id bridge.countryid-> country.id
- Izkata 2y agoOh definitely, I just couldn't think of a better example off the top of my head. But also not really relevant: You could also have another table and the relationships be A -> B -> D and A -> C -> D, with the desired join between A and D. Remember this whole thread is about the system figuring out the JOIN criteria automatically.