[英]Using CROSS JOIN
我正在學習如何使用CROSS JOINS,但看不到我正在嘗試的錯。
我有一個Pattern
和Numbers
表。
編號表:
編號TinyINT
模式表:
PatternID TinyINT IDentity(1,1)
Patternresult varchar(5)
我已經從1-22插入了Number
表中的每一行。
目前,我沒有顯示任何結果。 但是我想顯示的是僅0到5之間的所有模式(我不能在數字表中包含“ 0”,因為稍后我將使用一個表,該表要求從“編號表
e.g
0 - 0
0 - 1
0 - 2
0 - 3
0 - 4
0 - 5
1 - 0
1 - 1
1 - 2
1 - 3
1 - 4
1 - 5
etc
我的CROSS JOIN做錯了什么?
INSERT INTO dbo.Pattern(PatternResult)
SELECT cast(n.NumberID AS VARCHAR (5)) + ' - ' + cast(nn.NumberID AS VARCHAR (5)) AS PatternResult
FROM dbo.Number n
CROSS JOIN dbo.Number nn
我在查詢中添加了“> 0”,因為我的數字表從0開始,所以您可以忽略它。
;With Cte
as
(
select 0 as n
union all
select top 5 Number from numbers where number>0
order by number
)
Insert into dbo.pattern
(
PatternResult
)
select cast(c.n as varchar)+'-'+b.n
from cte c
cross join
(select cast(n as varchar) from cte) b(n)
order by c.n
輸出:
0-0
0-1
0-2
0-3
0-4
0-5
1-0 and so on
您的問題,您的數字包含從1到22的數字,並且PatternResult僅是varchar(5)
因此,當您連接2位數字時,您將獲得PatternResult之類的'12-13',其長度超過5
因此,您的查詢應該出現截斷錯誤,因此在Pattern表中沒有結果。
將PatternResult更改為varchar(10),它應該可以工作。
首先,您的查詢是insert
。 Insert
語句不返回結果集。
因此,問題是,這將返回什么?
select *
from dbo.Pattern
接下來,模式有五個字符的空間,但是您已經用完了' - '
三個字符。 因此,請嘗試使其適合模式(通過刪除空格):
INSERT INTO dbo.Pattern(PatternResult)
SELECT cast(n.NumberID AS VARCHAR (5)) + '-' + cast(nn.NumberID AS VARCHAR (5)) AS PatternResult
FROM dbo.Number n CROSS JOIN
dbo.Number nn;
最后,使用VARCHAR()
時,使尺寸過小確實沒有任何好處。 您最好將字段定義為Patternresult varchar(255)
類的東西,這樣它對於任何結果都將始終足夠大。 使用CHAR()
一個很小的值很重要,因為所有其他字符都存儲為空格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.