MSSQL - 循环遍历表并在新查询中使用字段值

时间:2014-02-21 11:02:20

标签: sql loops

我有一个工厂名称为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

我显然不合时宜,这里有什么建议吗?一如既往地谢谢。

3 个答案:

答案 0 :(得分:2)

SQL是一种基于集合的语言,因此您应尽量不要在SQL中使用循环。这会伤害表现。

你想要做的是,使用JOIN一起加入2个表:

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

像这样的东西。 这将为您提供一系列在某个工厂生产的产品。

以一种很好的方式向用户显示这一点应该在应用程序的UI层中完成。不要尝试使用SQL来正确格式化数据。

答案 1 :(得分:1)

如果要列出所有工厂名称和所有产品,可以使用如下交叉连接:

    select factoryname, productname from factory cross join products

Cross Join基本上是2个表的笛卡尔积,如果表1有m且表2有n个记录,则得到(m * n)个记录。

答案 2 :(得分:0)

JOIN将是上述的有效解决方案,但两个表中都应该有共同的列。 如果所有工厂都有一些产品,INNER JOIN是最合适的。 如果您希望列出所有工厂,但有没有产品的工厂,LEFT JOIN将起作用。 如果您希望列出所有产品并且工厂表中没有相应工厂的产品,则RIGHT JOIN将起作用。

希望它有所帮助........