Операции над множествами

Совпадение типов данных столбцов

Для выполнения операций над множествами все запросы должны удовлетворять следующим правилам:

  • количество полей во всех запросах должно совпадать;
  • типы данных соответствующих полей должны совпадать.

Посмотрим, что это значит на практике. Таблицы для примеров:

SELECT *
  FROM table1
#valuename
11one
23three
35five
SELECT *
  FROM table2
#valuename
12two
23three
34four

Что будет, если количество столбцов в запросах не будет совпадать?

SELECT value, name
  FROM table1
 UNION
SELECT value
  FROM table1
each UNION query must have the same number of columns

Теперь попробуем объединить строки с разными типами данных столбцов:

SELECT value
  FROM table1
 UNION
SELECT name
  FROM table1
UNION types integer and text cannot be matched

Что делать, если очень хочется объединить столбцы с разными типами данных? Нужно их преобразовать к одному типу данных. Функции преобразования типов данных рассмотрим в отдельной теме, а пока преобразуем столбец value к строке:

SELECT value::text
  FROM table1
 UNION
SELECT name
  FROM table1
#value
11
23
35
4one
5three
6five

Стоит отметить, что некоторые преобразования типов данных PostgreSQL делает автоматически. Например, целочисленные значения могут быть автоматически преобразованы к числам с плавающей точкой.

Если хочешь знать точные правила определения типа данных столбца, то можешь найти их здесь

ПредыдущаяСледующая