Czy istnieje sposób na użycie przecięcia bez wybierania odrębnych wartości? Coś jak INTERSECT ALL
.Przecięcie w SQL Server
Rozważmy na przykład tabela A i B
A --> 1, 1, 1, 2, 3, 4
B --> 1, 1, 2
skutkowałoby
Result --> 1, 1, 2
EDIT
Myślę, że to wyjaśnia link dobrze, czego chcę. Ten other link jest również interesujący, aby zrozumieć pytanie. Lub this other link lepiej tłumaczy wydarzenie.
EDIT 2
Załóżmy tabel:
Tabela 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 ║
╚════════╩════╩═══╩════╩════╝
Tabela 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 ║
╚═════╩════╩═══╩════╩════╝
Odpowiedź na przecinają (select * from A INTERSECT select * from B
) to:
╔═════╦════╦═══╦════╦════╗
║ A ║ B ║ C ║ D ║ E ║
╠═════╬════╬═══╬════╬════╣
║ Car ║ 10 ║ 1 ║ OK ║ -1 ║
║ Dog ║ 3 ║ 1 ║ OK ║ -1 ║
╚═════╩════╩═══╩════╩════╝
Ponieważ zajmuje tylko różne wartości. Co chcę jest podejmowanie wspólnych wierszy, jak:
╔═════╦════╦═══╦════╦════╗
║ A ║ B ║ C ║ D ║ E ║
╠═════╬════╬═══╬════╬════╣
║ Car ║ 10 ║ 1 ║ OK ║ -1 ║
║ Car ║ 10 ║ 1 ║ OK ║ -1 ║
║ Dog ║ 3 ║ 1 ║ OK ║ -1 ║
╚═════╩════╩═══╩════╩════╝
przestrzegać nie muszę wiedzieć, co mam połączyć (połączenie jest pozycyjny, podobnie jak INTERSECT
). Identyfikator byłby czymś skonstruowanym przy użyciu wszystkich kolumn (połączenie między tabelami to wszystkie kolumny, w zależności od ich położenia).
HUH? Dlaczego wynik ma dwie wartości dla 1? To nie jest to, co INTERSECT w ogóle oznacza. Jest przeznaczony do zwracania różnych wartości, które występują w obu. Aby to zadziałało, potrzebujesz czegoś innego niż przecięcie. –
To jest przykład. Połączenie tabel byłoby pozycyjne. Podobnie jak skrzyżowanie. – Nizam
@SeanLange - Ansi SQL ma "INTERSECT ALL" i "EXCEPT ALL". –