Left Join with only one of multiple matches in the right table
0
votes
1
answer
2725
views
I have a database, where every entry may have multiple names, therefore I made a name database. While all names will be displayed otherwhere I need a list of all main entries with one representative name. All names are ranked and the one with the highest ranking-position shall be used. Unranked names are “0” or “-1” and should be ignored and since the name-ranking-system is bad, the one to use is not always “1”. In the case of no name being there, the main entry should still be returned.
In short: I need a left join that takes all entries of table “main” and joins them with the name that has the smallest, greater than 0, position, if there is one.
main:
| main_ID | val_A | val_B |
+---------+-------+-------+
| 2 | some | stuff |
| 3 | and | more |
| 4 | even | more |
names:
| name_ID | main_ID | name | position |
+---------+---------+----------------+----------+
| 1 | 2 | best name | 1 |
| 2 | 2 | some name | 0 |
| 3 | 3 | alt name | 3 |
| 4 | 2 | cool name | 2 |
| 5 | 3 | abandoned name | -1 |
| 6 | 3 | awesome name | 2 |
what I want to get:
| main_ID | val_A | val_B | name |
+---------+-------+-------+--------------+
| 2 | some | stuff | best name |
| 3 | and | more | awesome name |
| 4 | even | more | |
Asked by Benito
(1 rep)
Jul 10, 2023, 10:01 PM
Last activity: Jul 24, 2025, 10:02 PM
Last activity: Jul 24, 2025, 10:02 PM