Несколько UNION и JOIN ON

0

Как выбрать строки из нескольких таблиц 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

  • 0
    Почему вы хотите посмотреть?
  • 0
    Я хочу, чтобы этот VIEW позже использовался в другом запросе.
Показать ещё 4 комментария
Теги:

1 ответ

0
Лучший ответ

Структура

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.

  • 0
    Получение ошибки: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'AS year FROM States2017 UNION ALL SELECT states2018. *,' 2018 ' Year AS year FRO' в строке 1. См. sqlfiddle.com/#!9/ aca397c / 2
  • 0
    @JohnPeeterson Я исправил скрипт, попробуйте еще раз.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню