簡體   English   中英

MSSQL-遍歷表並在新查詢中使用字段值

[英]MSSQL - Loop through table and use field value in new query

我有一個帶有工廠名稱的工廠表: select factoryname from factory

然后,我有一個產品表: 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

我顯然不合時宜,在這里,有什么建議嗎? 一如既往的感謝。

SQL是一種基於集合的語言,因此您應盡可能避免在SQL中使用循環。 這會損害性能。

您想要做的是使用JOIN將2個表聯接在一起:

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

這樣的事情。 這將為您提供在某個工廠生產的產品的集合。

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

如果要列出所有工廠名稱和所有產品,則可以使用交叉連接,如下所示:

    select factoryname, productname from factory cross join products

Cross Join基本上是2個表的笛卡爾積,如果表1有m個記錄且表2有n個記錄,則得到(m * n)個記錄。

JOIN將是上述有效的解決方案,但兩個表中應有一個公共列。 如果對所有工廠都有某種產品,INNER JOIN最合適。 如果您希望所有工廠都被列出,而有些工廠沒有產品,則LEFT JOIN將起作用。 如果您希望列出所有產品並且工廠表中沒有相應工廠的產品,那么RIGHT JOIN將起作用。

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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