Есть ли способ использовать пересечение, не выбирая только отдельные значения? Что-то вроде INTERSECT ALL
.Пересечь в SQL Server
Для примера рассмотрим таблицу А и В
A --> 1, 1, 1, 2, 3, 4
B --> 1, 1, 2
приведет ли
Result --> 1, 1, 2
EDIT
Я думаю, что это link хорошо объясняет то, что я хочу. Это other link также интересует вопрос. Или this other link объясняет событие лучше.
EDIT 2
Пусть таблицы:
Таблица A
╔════════╦════╦═══╦════╦════╗
║ A ║ B ║ C ║ D ║ E ║
╠════════╬════╬═══╬════╬════╣
║ Car ║ 10 ║ 1 ║ OK ║ -1 ║
║ Car ║ 10 ║ 1 ║ OK ║ -1 ║
║ Car ║ 10 ║ 1 ║ OK ║ -1 ║
║ House ║ 10 ║ 1 ║ NO ║ -5 ║
║ Monkey ║ 15 ║ 1 ║ OK ║ -1 ║
║ Dog ║ 3 ║ 1 ║ OK ║ -1 ║
╚════════╩════╩═══╩════╩════╝
Таблица B
╔═════╦════╦═══╦════╦════╗
║ A ║ B ║ C ║ D ║ E ║
╠═════╬════╬═══╬════╬════╣
║ Car ║ 10 ║ 1 ║ OK ║ -1 ║
║ Car ║ 10 ║ 1 ║ OK ║ -1 ║
║ Car ║ 15 ║ 1 ║ OK ║ -1 ║
║ Dog ║ 3 ║ 1 ║ OK ║ -1 ║
╚═════╩════╩═══╩════╩════╝
Ответ на пересекаются (select * from A INTERSECT select * from B
) будет:
╔═════╦════╦═══╦════╦════╗
║ A ║ B ║ C ║ D ║ E ║
╠═════╬════╬═══╬════╬════╣
║ Car ║ 10 ║ 1 ║ OK ║ -1 ║
║ Dog ║ 3 ║ 1 ║ OK ║ -1 ║
╚═════╩════╩═══╩════╩════╝
Потому что он принимает только отличные значения. То, что я хочу, принимает общие строки, как:
╔═════╦════╦═══╦════╦════╗
║ A ║ B ║ C ║ D ║ E ║
╠═════╬════╬═══╬════╬════╣
║ Car ║ 10 ║ 1 ║ OK ║ -1 ║
║ Car ║ 10 ║ 1 ║ OK ║ -1 ║
║ Dog ║ 3 ║ 1 ║ OK ║ -1 ║
╚═════╩════╩═══╩════╩════╝
Наблюдайте мне не нужно знать, что я должен связать (соединение позиционные, так же, как INTERSECT
). Идентификатор будет построен с использованием всех столбцов (связь между таблицей - все столбцы, основанные на их позиции).
HUH? Почему результат имеет два значения для 1? Это не то, что означает INTERSECT. Он предназначен для возврата отдельных значений, которые присутствуют в обоих. Для этого вам понадобится нечто иное, чем пересечение. –
Это пример. Соединение таблиц будет позиционным. Также как пересечение. – Nizam
@SeanLange - Ansi SQL имеет 'INTERSECT ALL' и' EXCEPT ALL'. –