[英]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.