Как выбрать строки из нескольких таблиц JOINing по определенному ключу?
У меня есть несколько табличных states(year)
с одинаковой структурой. Я хочу, чтобы VIEW выбирал только строки из states(year)
с PropertyID, содержащиеся в properties
таблицы у конкретного пользователя:
CREATE OR REPLACE VIEW selected_states AS
SELECT *, 2017 AS year FROM states2017
UNION ALL SELECT *, 2018 AS year FROM states2018
AS s
JOIN properties p ON s.propertyID = p.propertyID WHERE p.userID=1
получить сообщение об ошибке
Используемые операторы SELECT имеют различное количество столбцов
SQLfiddle: http://sqlfiddle.com/#!9/aca397c
Структура
SELECT *, 2017 AS year FROM states2017
а также
SELECT *, 2018 AS year FROM states2018
не то же самое. Последний столбец первой таблицы - 2017
а второй - 2018
поэтому их нельзя объединить.
Чтобы исправить это, создайте общий псевдоним за эти годы в обеих таблицах.
CREATE OR REPLACE VIEW selected_states AS
SELECT s.*, p.userID FROM
(SELECT states2017.*, '2017' 'Year' FROM states2017
UNION ALL
SELECT states2018.*, '2018' 'Year' FROM states2018) s
JOIN properties p ON s.propertyID = p.propertyID WHERE p.userID=1;
См. ДЕМО на SQL Fiddle.
Year
AS year FRO' в строке 1. См. sqlfiddle.com/#!9/ aca397c / 2