Make SQL Select same row multiple times

后端 未结 11 2143
南方客
南方客 2020-12-11 16:02

I need to test my mail server. How can I make a Select statement that selects say ID=5469 a thousand times.

相关标签:
11条回答
  • 2020-12-11 17:01

    If I get your meaning then a very simple way is to cross join on a derived query on a table with more than 1000 rows in it and put a top 1000 on that. This would duplicate your results 1000 times.

    EDIT: As an example (This is MSSQL, I don't know if Access is much different)

    SELECT
        MyTable.*
    FROM
        MyTable
    CROSS JOIN
    (
        SELECT TOP 1000
            *
        FROM
            sysobjects
    ) [BigTable]
    WHERE
        MyTable.ID = 1234
    
    0 讨论(0)
  • 2020-12-11 17:01

    In postgres there is a nice function called generate_series. So in postgreSQL it is as simple as:

    select information from test_table, generate_series(1, 1000) where id = 5469
    

    In this way, the query is executed 1000 times.

    Example for postgreSQL:

    CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; --To be able to use function uuid_generate_v4()
    
    --Create a test table
    create table test_table (
       id serial not null,
       uid UUID NOT NULL,
       CONSTRAINT uid_pk PRIMARY KEY(id));
    
    -- Insert 10000 rows
    insert into test_table (uid) 
    select uuid_generate_v4() from generate_series(1, 10000);
    
    -- Read the data from id=5469 one thousand times
    select id, uid, uuid_generate_v4() from test_table, generate_series(1, 1000) where id = 5469;
    

    As you can see in the result below, the data from uid is read 1000 times as confirmed by the generation of a new uuid at every new row.

     id  |uid                                   |uuid_generate_v4
     ----------------------------------------------------------------------------------------
     5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"5630cd0d-ee47-4d92-9ee3-b373ec04756f"
     5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"ed44b9cb-c57f-4a5b-ac9a-55bd57459c02"
     5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"3428b3e3-3bb2-4e41-b2ca-baa3243024d9"
     5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"7c8faf33-b30c-4bfa-96c8-1313a4f6ce7c"
     5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"b589fd8a-fec2-4971-95e1-283a31443d73"
     5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"8b9ab121-caa4-4015-83f5-0c2911a58640"
     5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"7ef63128-b17c-4188-8056-c99035e16c11"
     5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"5bdc7425-e14c-4c85-a25e-d99b27ae8b9f"
     5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"9bbd260b-8b83-4fa5-9104-6fc3495f68f3"
     5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"c1f759e1-c673-41ef-b009-51fed587353c"
     5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"4a70bf2b-ddf5-4c42-9789-5e48e2aec441"
    

    Of course other DBs won't necessarily have the same function but it could be done:

    See here.

    0 讨论(0)
  • 2020-12-11 17:05

    in sql server try:

    print 'wow'
    go 5
    

    output:

    Beginning execution loop
    wow
    wow
    wow
    wow
    wow
    Batch execution completed 5 times.
    
    0 讨论(0)
  • 2020-12-11 17:07

    Create a helper table for this purpose:
    JUST_NUMBER(NUM INT primary key)
    Insert (with the help of some (VB) script) numbers from 1 to N. Then execute this unjoined query:

    SELECT  MYTABLE.*
    FROM    MYTABLE,
            JUST_NUMBER
    WHERE   MYTABLE.ID = 5469 
        AND JUST_NUMBER.NUM <= 1000
    
    0 讨论(0)
  • 2020-12-11 17:07

    Repeat rows based on column value of TestTable. First run the Create table and insert statement, then run the following query for the desired result. This may be another solution:

    CREATE TABLE TestTable
    (
     ID INT IDENTITY(1,1),
     Col1 varchar(10),
     Repeats INT
    )
    
    INSERT INTO TESTTABLE
    VALUES ('A',2), ('B',4),('C',1),('D',0)
    
    WITH x AS 
    (
      SELECT TOP (SELECT MAX(Repeats)+1 FROM TestTable) rn = ROW_NUMBER() 
      OVER (ORDER BY [object_id]) 
      FROM sys.all_columns 
      ORDER BY [object_id]
    )
    SELECT * FROM x
    CROSS JOIN TestTable AS d
    WHERE x.rn <= d.Repeats 
    ORDER BY Col1;
    
    0 讨论(0)
提交回复
热议问题