我有两张桌子:
客户数据表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首先在表中放置随机数,然后查找。
非常感谢任何帮助。
答案 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)