Czy obowiązkowe jest, aby tabele były w związku, aby zastosować Dołącz do nich? Jeśli tak, to Opracuj z przykładem Jeśli nie, to Opracuj z Przykładem .. Dziękujemy
Odpowiedzi:
0 dla odpowiedzi № 1Wcale nie dla sql-Server
. Tabele nie potrzebują powiązania kluczowego, aby mogły zostać ze sobą połączone.
Oto przykład:
SELECT * FROM
Table1 INNER JOIN Table2 ON Table1.Id = Table2.Id
Kolumna Id tabeli 1 nie musi być kluczowana do kolumny Id tabeli 2, aby to wykonać.
0 dla odpowiedzi nr 2
W MS SQL Server? Nie, tabele nie muszą mieć żadnych formalnych relacji, aby można je było zastosować w dowolnym rodzaju złączenia.
Ponieważ pytasz o przykład, rozważLiczby lub tablica wyników. Zasadniczo jest to tabela z jedną kolumną, której liczba rośnie wraz ze wzrostem wartości. (tzn. pierwszy rząd to 1, drugi rząd to 2 itd.) Jest to przydatne do wielu obliczeń, w tym do generowania zakresów dat, takich jak wszystkie dni, w których ktoś podróżował:
-- Assume a table "Numbers exists with one column, "num":
CREATE TABLE [dbo].[Numbers](
[Num] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_Numbers] PRIMARY KEY CLUSTERED
(
[Num] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
Możemy następnie użyć tego, łącząc go z całkowicie niepowiązaną tabelą z zakresami dat. Chcemy wymienić wszystkie daty w dowolnym zakresie dat:
if OBJECT_ID("tempdb..#source") is not null drop table #source
go
create table #source(
id int,
startdate date,
enddate date
)
go
insert into #source values (1, "2013-12-28", "2014-01-12")
insert into #source values (1, "2014-01-10", "2014-01-22")
insert into #source values (2, "2014-12-22", null)
insert into #source values (2, "2014-12-01", "2015-01-10")
go
-- */
declare @earlydate date, @latedate date
-- Start and end dates of the range we"re trying to evaluate within
set @earlydate = "2014-01-01"
set @latedate = "2014-12-31"
;with fixed as (
select
id,
(select max (start_date) from (values (#source.startdate), (@earlydate)) as sd(start_date)) as startdate, -- calculate the LATER of the start dates
(select min (end_date) from (values (coalesce(enddate, cast(CURRENT_TIMESTAMP as date))), (@latedate)) as ed(end_date)) as enddate -- calculate the EARLIER of the end dates
from #source
)
select
id,
DateAdd(dd, num-1, startdate)
from fixed
cross apply Numbers
where DateAdd(dd, num, startdate) between startdate and dateadd(dd, 1, enddate)
order by 1,2
0 dla odpowiedzi № 3
Nie, nie jest obowiązkowe, aby dwie tabele były w relacjach, aby zastosować na nich łączenie.
Kiedy myślisz o słowie „Dołącz” w swoim umyśle, tyw rzeczywistości zbliżają dwie rzeczy do wspólnej płaszczyzny, warstwy, interfejsu itp. Tak długo, jak twoje dwie tabele mają wspólną wartość wiersza, możesz połączyć te dwie wartości z tymi wspólnymi wartościami / wartościami. Powiedzmy, że masz tabelę A, B. A masz trzy (lub cokolwiek) kolumnę a1, a2, a3. Podobnie B ma 5 (lub cokolwiek) liczbę kolumn. JEŻELI dowolna kolumna w A ma taką samą wartość jak dowolna kolumna w B w dowolnym wierszu, można użyć tej wspólnej wartości do połączenia. Przykład: wybierz nazwę kolumny z lewego połączenia A (lub zewnętrznego lub wewnętrznego) B na A.column = B.column
Związek jest bardziej specyficznym przypadkiemcelowo wprowadzając wartości wspólne dla dwóch tabel. Przykład: klucz obcy, klucz podstawowy. Zmuszasz tabelę zawierającą klucz obcy do posiadania takich samych wartości jak tabela z kluczem podstawowym.