gpt4 book ai didi

mysql - 如何从表中的某一列中选择具有相同但随机值的行,而无需仅使用一个查询知道该值?

转载 作者:行者123 更新时间:2023-11-29 10:48:10 25 4
gpt4 key购买 nike

让我们假设以下表格和数据:

CREATE TABLE `test_abc` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`val_abc` INT UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
);
INSERT INTO test_abc (val_abc) VALUES
(1), (2), (1), (1), (3), (2), (3), (2), (3), (3), (3);

id | val_abc
------------
1 | 1
2 | 2
3 | 1
4 | 1
5 | 3
6 | 2
7 | 3
8 | 2
9 | 3
10 | 3
11 | 3

现在我想选择具有相同 val_abc 的所有行,而哪个 val_abc 并不重要是的,但由于它不应该总是相同,因此需要有一个随机因素。所以基本上随机地要么所有行 val_abc = 1或所有带有 val_abc = 2 的行等等。 val_abc 的值可以是任何值(甚至是非数字),并且在代码级别是未知的。例如,预期结果是:

id | val_abc
------------
2 | 2
6 | 2
8 | 2

id | val_abc
------------
5 | 3
7 | 3
9 | 3
10 | 3
11 | 3

我当然可以提出两个查询。一个获得随机但现有的值 val_abc ,例如SELECT val_abc FROM test_abc ORDER BY RAND() LIMIT 1 。然后进行第二个查询以获取 val_abc 中具有此特定值的所有行。 。

第二种可能性是使用子查询,例如 SELECT * FROM test_abc WHERE val_abc = (SELECT val_abc FROM test_abc ORDER BY RAND() LIMIT 1) 。但这实际上行不通(MariaDB 5)。结果似乎完全随机并且每次都不同(1行、5行、3行、混合val_abc值等等),我还没有完全理解。看来 ORDER BY RAND 和 LIMIT 的组​​合无法按预期在子查询中工作。

是否有可能通过子选择或什至使用没有任何子查询的查询来实现此目的?

最佳答案

将比较移至 FROM 子句:

SELECT t.*
FROM test_abc t JOIN
(SELECT val_abc FROM test_abc ORDER BY RAND() LIMIT 1) trand
ON t.val_abc = trand.val_abc;

FROM 子句中的子查询仅计算一次,因此您只会得到一行。在 WHERE 子句中,子查询针对每一行计算一次,因此每次都会得到不同的值。

关于mysql - 如何从表中的某一列中选择具有相同但随机值的行,而无需仅使用一个查询知道该值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44199491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com