簡體   English   中英

使用CROSS JOIN

[英]Using CROSS JOIN

我正在學習如何使用CROSS JOINS,但看不到我正在嘗試的錯。

我有一個PatternNumbers表。

編號表:
編號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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM