我正在进行下一个查询:
SELECT id, name, keyt
FROM table
WHERE id = (SELECT t2.id FROM table t2 WHERE t2.keyt=21 ORDER BY RAND() LIMIT 1)
假设表格如下:
| id | name | keyt |
+ ------------------------- +
| 1 | Hello | 21 |
| 3 | Katzet | 1 |
| 1 | Welcome | 1 |
| 2 | Two | 21 |
| 2 | Other | 1 |
应该返回其中一对:
所以,这个想法是:
获取一个ID,其keyt
值设置为21
然后,获取具有所选id 的所有行(与所有其他keyt值无关)
如果按照您的建议执行操作...我会得到混合的 id 值,并且所有结果行必须具有相同的 id 。
答案 0 :(得分:1)
此查询中的子查询
SELECT id, name, keyt
FROM table
WHERE id = (SELECT t2.id FROM table t2 WHERE t2.keyt=21 ORDER BY RAND() LIMIT 1)
只返回一条记录,因为它最后添加了LIMIT 1
。
此外,在您的问题中,该表仅包含1条记录 值
keyt
= 21 ,因此您只能获得一条记录。
如果您想要更多记录,则应删除LIMIT
。在这种情况下,您可以将查询重新命名为:
SELECT id, name, keyt
FROM table
WHERE id IN (SELECT t2.id FROM table t2 WHERE t2.keyt=21 ORDER BY RAND())
希望这是你的期望。因为你的实际目标不是很明确。
答案 1 :(得分:1)
SELECT x.*
FROM my_table x
JOIN
( SELECT id
FROM my_table
WHERE keyt = 21
ORDER
BY RAND() LIMIT 1
) y
ON y.id = x.id;
答案 2 :(得分:0)
你的表在keyt列中有两个21,所以你的子句在where子句中返回2个值,如果id为1和2.所以你需要做的是使用等于运算符“=”而不是使用IN运算符在where子句中。
SELECT id, name, keyt FROM table WHERE id IN (SELECT t2.id FROM table t2 WHERE t2.keyt=21 ORDER BY RAND())