【问题标题】:SQL 'while' to read a table data to a variableSQL 'while' 将表数据读入变量
【发布时间】:2015-01-19 10:48:53
【问题描述】:

我如何编写while 循环来将数据从表填充到要在单独查询中使用的变量? 例如:select ITEM from Table1

ITEM
A0001
B0001
C0003
D0005
E0032

如果我可以在 ITEM@var1 列下获得所有结果,然后在单独的查询中使用它,例如:

select * 
from Table2 
where @var1 = Item_table2  <-- a random column in table2

此查询应匹配 @var1A0001E0032Table2 中的 Item_table2 列。

【问题讨论】:

  • 您使用的是哪个 DBMS?

标签: sql loops while-loop


【解决方案1】:

这是你的第一张桌子:

mysql> select * from item_table1;
+-------+
| item  |
+-------+
| A0001 |
| B0001 |
| C0003 |
| D0005 |
| E0032 |
+-------+
5 rows in set (0.01 sec)

现在,我们需要基于此表创建一个视图。该视图是您在问题中通过@var1 调用的等效概念:

mysql> create view item_table2 as (select * from item_table1);
Query OK, 0 rows affected (0.30 sec)

让我们看看我们的观点item_table2(用你自己的话来说@var1):

mysql> select * from item_table2;
+-------+
| item  |
+-------+
| A0001 |
| B0001 |
| C0003 |
| D0005 |
| E0032 |
+-------+
5 rows in set (0.00 sec)

现在,您可以从 item_table2 中选择存在于您的 item_table1 中的任何项目,如下所示:

 select it2.item from item_table2 it2 where it2.item='A0001'

【讨论】:

    【解决方案2】:

    如果你真的想要循环/循环,那就用这个吧:

    DECLARE @var1 varchar(100)
    
    DECLARE ITEM_CURSOR CURSOR FOR
    SELECT ITEM FROM Table1
    
    OPEN ITEM_CURSOR
    FETCH NEXT FROM ITEM_CURSOR INTO @var1
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
    
    /*Your separate query*/
    SELECT * FROM Table2 where @var1 = Item_table2
    
    FETCH NEXT FROM CURSOR_SMS INTO @var1
    
    END
    CLOSE ITEM_CURSOR;
    DEALLOCATE ITEM_CURSOR;
    

    【讨论】:

      【解决方案3】:

      你不需要循环。

      select * from Table2 where Item_table2 in (select ITEM from Table1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-30
        • 2014-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多