1

我有 3 个表 .a,b,c 。数据类型为 varchar 的名称。我需要一个查询,该查询将从每个表中获取一行并给我另一个表,即“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

有很多方法可以从数据库表中选择随机记录或行。下面是一些不需要额外应用程序逻辑的示例 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

以下查询将从每个表中返回一个随机行。

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

试试这个希望它会帮助你

 ---- 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 回答