我有一个工厂名称为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
我显然不合时宜,这里有什么建议吗?一如既往地谢谢。
答案 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将起作用。
希望它有所帮助........