Если вы хотите объединить две таблицы, которые имеют только частично равные столбцы, то вы должны заполнить отсутствующие столбцы соответствующих таблиц NULL или другими значениями по умолчанию. Например,
SELECT A, B, C, D, E, '' AS F
FROM X
UNION ALL
SELECT A, B, C, '' AS D, NULL AS E, F
FROM Y
Использовать UNION (без ВСЕХ), если вы хотите устранить дубликаты. Могут быть только дубликаты, если дополнительные столбцы соответствуют значениям по умолчанию, используемым для другой таблицы.
Другой подход заключается в объединении соответствующих столбцов для устранения дубликатов в этих столбцах
SELECT
COALESCE(X.A, Y.A) AS A,
COALESCE(X.B, Y.B) AS B,
COALESCE(X.C, Y.C) AS C,
X.D,
X.E,
Y.F
FROM
X
FULL OUTER JOIN Y
ON X.A = Y.A AND
X.B = Y.B AND
X.C = Y.C
Это, вероятно, соответствует вашей идее объединения UNION и JOIN. В отличие от подхода UNION, это объединяет строки с одинаковыми A, B и C.
Обратите внимание, что вы должны использовать FULL OUTER JOIN , чтобы включить результаты обеих таблиц, даже если соответствующая запись отсутствует в другой таблице. Не все диалекты SQL имеют внешнее соединение.
Функция слияния имеет разные названия на разных диалектах.
Вы также можете столкнуться с проблемой СОЕДИНЕНИЕ пропущенных значений NULL при объединении со значениями NULL.
Поместите константу в класс, где это является самым релевантным - например. Math.Pi
, Int32.MinValue
и т.д.
Я видел различные константы, которые должны на самом деле быть перечислениями, также - особенно для кодов состояния и т.д.
Я не думаю, что мудро создать класс (или модуль) только для констант, если действительно нет никакого разумного класса, с которым связаны те константы.
Моя практика подобна тому, что заявляет Jon. Подавляющее большинство перечислений и постоянный, очевидно, связывается с конкретным классом или модулем и объявляется общественностью там.
Самый низкий уровень моего программного обеспечения называют Утилитой и содержит математические подпрограммы и другие функции и метод общей утилиты (а не определенной утилиты к режиму того приложения). Там модуль, который имеет как набор функции, которые просто являются служебными функциями/подпрограммами, которые не имеют никакой общей темы. Именно в той одной области любые перечисления или постоянное движение.
Существует подобная область для прикладной модели, куда утилиты, которые имеют общее применение для того приложения, идут. И это, где константы, которые не могут быть связаны ни с каким классом ОБРАЗЦОВОГО движения.
Таким образом, там три области, где постоянный могут быть найдены в моей персональной платформе
Объявления класса общий служебный модуль прикладной модели общий служебный модуль служебного блока.
На практике только небольшое количество из десятков перечисления и постоянный когда-либо должно было объявляться в любой служебные модули. Большинство из тех является замедлениями Win32, используемыми функцией Win32, которые импортируются в мой блок.
Я соглашаюсь с @Jon. Однако для констант, которые уникальны для Вашего приложения - т.е. они - значения по умолчанию конфигурации, настраивая параметры, и т.д., я иногда создаю статический класс конфигурации со строгим контролем типов для содержания их. Я выставляю значения через свойства только с общедоступными определенными методами считывания. Таким образом, они могут быть загружены из конфигурационного файла, но сосланы всюду по Вашему коду как фиксированные значения.