繁体   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