1

3つのテーブル.a、b、cがあります。データ型がvarcharである名前。各テーブルから1つの行を取得し、「d」という別のテーブルを取得するクエリが必要です。このdには、たとえば3つの行があります。a1上記b3上記c2..テーブルdのこれらの値は、このクエリを実行するたびにランダムになります。

Table a   Table b   Table c
 Name      Name       Name
 a1        b1         c1
 a2        b2         c2 
 a3        b3         c3

クエリを実行するとき、ランダムなテーブル'd'が必要です

Table d    Table d
 Name       Name
 a2         b1
 b3         a3
 c1         c3

これらのテーブル間には関係がありません!

4

4 に答える 4

0

次のクエリは、各テーブルから1つのランダムな行を返します。

WITH  OneRandomRowFromA
    AS ( SELECT TOP 1
                 Name
               , RAND(CAST(NEWID() AS BINARY(6))) AS RandomNumber
         FROM    TableA
         ORDER BY 2
       ) ,
  OneRandomRowFromB
    AS ( SELECT TOP 1
                 Name
               , RAND(CAST(NEWID() AS BINARY(6))) AS RandomNumber
         FROM    TableB
         ORDER BY 2
       ) ,
  OneRandomRowFromC
    AS ( SELECT TOP 1
                 Name
               , RAND(CAST(NEWID() AS BINARY(6))) AS RandomNumber
         FROM    TableC
         ORDER BY 2
       )
SELECT   Name
FROM     OneRandomRowFromA
UNION ALL
SELECT   Name
FROM     OneRandomRowFromB
UNION ALL
SELECT   Name
FROM     OneRandomRowFromC
于 2012-05-09T11:54:15.863 に答える
0

データベース テーブルからランダムなレコードまたは行を選択する方法は多数あります。追加のアプリケーション ロジックを必要としない SQL ステートメントの例を次に示しますが、データベース サーバーごとに異なる SQL 構文が必要です。

MySQLでランダムな行を選択します。

 SELECT column FROM table
ORDER BY RAND()
LIMIT 1

PostgreSQLでランダムな行を選択します。

 SELECT column FROM table
ORDER BY RANDOM()
LIMIT 1

Microsoft SQL Serverでランダムな行を選択します。

SELECT TOP 1 column FROM table
ORDER BY NEWID()

IBM DB2でランダムな行を選択する

 SELECT column, RAND() as IDX 
FROM table 
ORDER BY IDX FETCH FIRST 1 ROWS ONLY

Oracleでランダム レコードを選択します。

 SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 1
于 2012-05-09T11:35:16.130 に答える
0

これを試してみてください

 ---- This will create a random number between 1 and 3           
   DECLARE @Random1 INT;
   DECLARE @Random2 INT;
   DECLARE @Random3 INT;
   DECLARE @Upper INT;
   DECLARE @Lower INT


SET @Lower = 1 ---- The lowest random number
SET @Upper = 4 ---- The highest random number
SELECT @Random1 = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0)  
SELECT @Random2 = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0)       
SELECT @Random3 = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0) 

--query here--
;with tableA AS
(
    SELECT Name,
    ROW_NUMBER() OVER (ORDER BY Name) AS RowNumber
    FROM a 
),  tableB AS
(
    SELECT Name,
    ROW_NUMBER() OVER (ORDER BY Name) AS RowNumber
    FROM b 
)
,tableC AS
(
    SELECT Name,
    ROW_NUMBER() OVER (ORDER BY Name) AS RowNumber
    FROM c 
)

select Name from tableA where RowNumber= @Random1 
union
 select Name from  tableB where  RowNumber=@Random2  
 union
 select Name from tableC where RowNumber=@Random3
于 2012-05-09T11:56:43.543 に答える
0

--テーブルD

select (select top 1 name from @TableA order by newid()) as Name
union all
select (select top 1 name from @TableB order by newid())
union all
select (select top 1 name from @TableC order by newid())
于 2012-05-09T19:52:02.220 に答える