Sql-Server
T-SQL 中奇怪的 JOIN ON 子句
我正在整理一些遺留程式碼,但多年來我從未見過這樣的:
Select * FROM GLAccounts INNER JOIN GLCharts ON glaGLChartID = glcGLChartID LEFT JOIN GLCategories ON glcGLCategoryID = gltGLCategoryID INNER JOIN GLDepartments ON glaGLDepartmentID = gldGLDepartmentID INNER JOIN GLDivisions ON glaGLDivisionID = glvGLDivisionID ,GLFiscalYearPeriods --<this comma> INNER JOIN GLFiscalYears ON glfGLFiscalYearID = glzGLFiscalYearID ORDER BY glcGLCategoryID ,glcParentGLChartID ,glaGLChartID
連接有效,但我在 ON 子句的任何 T-SQL 語法參考中都找不到這種逗號的使用。
這裡發生了什麼事?TIA
GLFiscalYearPeriods 是一個表,這個逗號表示交叉連接。(笛卡爾積)
該查詢似乎為每個會計年度返回了一些值。
鑑於此表:
create table a (id int, foo int); create table c (id int); insert into a values (1,1),(2,2),(3,3); insert into c values (10),(20); select * from a, c; select * from a cross join c;
編號 | 富 | ID -: | --: | -: 1 | 1 | 10 2 | 2 | 10 3 | 3 | 10 1 | 1 | 20 2 | 2 | 20 3 | 3 | 20
db<>在這裡擺弄
再舉一個例子:
create table a (id int, foo int); create table b (id int, foo int); create table c (id int); create table d (id int); insert into a values (1,1),(2,2),(3,3); insert into b values (1,1),(2,2),(3,3); insert into c values (10),(20); insert into d values (1),(2);
select * from a join b on a.id = b.id , c join d on d.id = a.id ;
消息 4104 級別 16 狀態 1 第 1 行
無法綁定多部分標識符“a.id”。
但如果你交叉加入它:
select * from a join b on a.id = b.id cross join c join d on d.id = a.id ;
編號 | 富 | 編號 | 富 | 編號 | ID -: | --: | -: | --: | -: | -: 1 | 1 | 1 | 1 | 10 | 1 1 | 1 | 1 | 1 | 20 | 1 2 | 2 | 2 | 2 | 10 | 2 2 | 2 | 2 | 2 | 20 | 2
db<>在這裡擺弄