I have two tables in a SQLite3 database, table a has columns id (primary key) and name, table b has columns parent (foreign key into a) and name as well.
I create a view for the join:
CREATE VIEW a_b AS
SELECT *
FROM a
JOIN
b ON b.parent = a.id;
I can do this in SQLiteStudio and the view works. I can now run a query like:
SELECT * FROM a_b
And get the expected results. However, since both a and b have a column called name, the second column is renamed to name:1 so if I want to select only that column, I need something like:
SELECT `name:1` FROM a_b
This works, but I was wondering if there's a better way to rename the columns in the view without renaming literally every column with:
CREATE VIEW a_b AS
SELECT a.id as a_name, a.name as a_name, b.parent as b_parent, b.name as b_name
FROM a
JOIN
b ON b_parent = a_id;
This works, but is clearly impractical for larger tables and also requires updating the view every time something changes about a or b. I know I can refer to the fields of the separate tables like like a.*, so I was looking for something like:
CREATE VIEW a_b AS
SELECT a.* AS a_*, b.* AS b_*
FROM a
JOIN
b ON b.parent = a.id;
This is clearly not code that works, but I hope it illustrates the requirement.
Is there a working, valid way to achieve this?
The best I was able to get was something like this:
CREATE VIEW a_b AS
SELECT *, b.name as b_name
FROM a
JOIN
b ON b.parent = a.id;
This at least defines an alias for b.name, but it also duplicates the column in the view.
Note: I'd be happy with a solution that only works in SQLiteStudio, but I suspect the solution is going to be a SQLite one, not an application-specific one.