2012-05-09 22 views
1

私は3つのテーブルを持っています.a、b、c。データ型がvarcharの名前。各テーブルから1行を取得し、別のテーブル、つまり 'd 'これは例えば3行あります。表DにおけるC2 ..these値以上のB3上記a1が、私は、クエリを実行すると各テーブルのランダムな値を持つテーブル

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

は私がランダム

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

でテーブル「D」を必要とする..私はこのクエリを実行するたびにランダムでありますこれらのテーブルの間には関係がありません!

+0

を--TableDに役立つ、この希望を試しますか –

答えて

0

は、あなたがこれまでに試してみましたが、どのようなあなたの期待結果セットが見えますか?何

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構文が必要です。 PostgreSQLのでランダムな行を選択し

SELECT column FROM table 
ORDER BY RAND() 
LIMIT 1 

MySQLののランダム行を選択

SELECT column FROM table 
ORDER BY RANDOM() 
LIMIT 1 

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

SELECT column FROM 
(SELECT column FROM table 
ORDER BY dbms_random.value) 
WHERE rownum = 1 
0

次のクエリは、retuます:

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 

でランダムな行を選択します各テーブルから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 
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] 
関連する問題