2014-02-21 52 views
0

表,並使用字段的值我有一個工廠表factoryname:select factoryname from factoryMSSQL - 遍歷新的查詢

然後我有一個產品表:select productcode from products

我要創建具有產品列表所有工廠。

所以輸出:

mill 1 product 1 
mill 1 product 2 
mill 1 product 3 
mill 2 product 1 
mill 2 product 2 
mill 2 product 3 
mill 3 product 1 
mill 3 product 2 
mill 3 product 3 

我有這樣的事情:

DECLARE @numrows int 
DECLARE @i int 
DECLARE @department int 

SET @numrows = (SELECT COUNT(*) FROM factory) 
WHILE (@i <= @numrows) 
    BEGIN 
     SELECT factoryname,product FROM products,factory) 
     SET @i = @i + 1 
    END 

我明明沒譜,在這裏,有什麼建議?一如既往地感謝。

+0

爲什麼不加入兩個表並按工廠順序? –

回答

1

如果要列出所有的工廠名稱和所有的產品,你可以使用一個交叉連接這樣的:

select factoryname, productname from factory cross join products 

一個Cross Join基本上是2代表的笛卡爾乘積,導致(m * n個)記錄表1是否有m,表2是否有n條記錄。

+0

這麼簡單,謝謝。 – Smudger

+0

沒問題!但請記住,即使只有其中一個很大,這對於具有大量行的表格也會很快變得難看。 –

+0

這會給你,'產品'的每一行,在工廠的每一行。事實上,它將返回'產品中的行數'*'工廠中的行數'。不是主題起始者想到的,我猜... –

2

SQL是一種基於集合的語言,因此您應儘可能不要在SQL中使用循環。它會傷害到性能。

你想要做什麼,是使用JOIN加入2代表一起:

SELECT factory.factoryname, products.productcode 
FROM factory, products 
INNER JOIN products.factory_id = factory.factory_id 

這樣的事情。 這會給你一個在某個工廠製造的產品集合。

以適合用戶的方式顯示此內容應該在應用程序的UI層完成。不要嘗試使用SQL來正確格式化數據。

0

JOIN將是上述的有效解決方案,但在這兩個表中應該有共同的列。 如果所有工廠都有一些產品,INNER JOIN是最合適的。 如果您希望列出所有工廠,但是沒有產品的工廠,則可以使用LEFT JOIN。 如果您希望列出所有產品,並且在工廠表中沒有相應工廠的產品,則RIGHT JOIN將起作用。

希望它有幫助.... someway ..........