2012-05-09 2 views
1

У меня есть 3 таблицы .a, b, c. Имя, тип данных которого является varchar. Мне нужен запрос, который получит одну строку из каждой таблицы и даст мне другую таблицу, а именно: d '. Это d будет иметь 3 строки, например. a1 выше b3 выше c2 ..these значений в таблице 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 

и между этими таблицами нет никакой связи!

+0

Что вы пробовали до сих пор, и что делает ваш ожидается ResultSet выглядеть? –

ответ

0

--TableD

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()) 
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 
0

Следующий запрос RETU rn одна случайная строка из каждой таблицы.

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 
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 [email protected] 
union 
select Name from tableC where [email protected] 
Смежные вопросы