循环功能

时间:2015-08-17 07:19:45

标签: sql database

我有两张桌子:

客户数据表A

ID -  Name     -   Age
1  -  Joe      -   24
2  -  Bloggs   -   46

表B是随机数的临时表

ID - RandomNumber
1  - 68
2  - 46
3  - 49
4  - 24

我需要从表A中选择

SELECT * FROM tableA a WHERE a.age = [randomNumber from tableB]

where子句需要查看tableB。查看第一个随机数 - 68,这是否存在于tableA的Age列中,不,所以移动到下一个随机数。 tableB中是否存在46,是的,然后返回2 - Bloggs - 46,并将该行插入另一个表中。

进程再次启动但是从哪里停止 - tableA中是否存在49,不,所以接下来,tableA中是否存在24,是的,将该行复制到其他表中。

我有150名学生的名单,并希望按年龄随机选择30名。

我可以使用RAND()函数,但数字每次都会改变,所以id首先在表中放置随机数,然后查找。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

如果您想随机排序输出行,ORDER BY RAND()是您的朋友:

SELECT sub.* FROM (
  SELECT ta.ID,
    ta.Name,
    ta.Age,
    ROWNUM num
  FROM TABLEA ta
    JOIN TABLEB tb ON ta.Age = tb.RandomNumber
    ORDER BY RAND() ) sub
  WHERE sub.num <=30

这将从表A中检索最多30个随机选择的名称

注意:如果您使用的是实施LIMIT的DBMS,您可以简化查询并简单地使用

  SELECT ta.ID,
    ta.Name,
    ta.Age
  FROM TABLEA ta
    JOIN TABLEB tb ON ta.Age = tb.RandomNumber
    ORDER BY RAND()
    LIMIT 30

答案 1 :(得分:1)

你可以尝试

SELECT tableA.name FROM tableA, tableB WHERE tableA.age IN (SELECT RandomNumber FROM tableB)

如果您只需要30名学生,您还应该添加

LIMIT 30

答案 2 :(得分:1)

Here您可以找到您的请求的示例。

select top 30 * from TableA where Age in (select RandomNumber from TableB)