gpt4 book ai didi

mysql - 根据从子查询返回的行数从 mysql 返回不同的数据

转载 作者:可可西里 更新时间:2023-11-01 08:52:45 26 4
gpt4 key购买 nike

我有一张记录表,这些记录要么是孤立的,要么是成对出现的。每个项目都有一个与之关联的状态。我需要从表中选择一个随机的孤立记录或配对记录(如果是一对记录,则都是记录),但不是状态为 0 的对。

我有下表:

    Table: things
+------------+---------++---------+
| id | cluster | status |
+------------+---------++---------+
| 1 | 1 | 0 |
| 2 | 1 | 1 |
| 3 | 3 | 1 |
| 4 | 4 | 1 |
| 5 | 4 | 0 |
| 6 | 6 | 1 |
| 7 | 6 | 1 |
| 8 | 8 | 1 |
+------------+---------++---------+

我的查询

SELECT 
things.id as clusterid,
things.id as id1,
things2.id as id2,
(SELECT count(id) FROM things WHERE cluster= clusterid) as num_nodes
FROM things
LEFT JOIN things AS things2 ON (
things2.status= 1
AND things2.cluster= things.cluster
AND things2.id!= things.cluster)
WHERE things.status= 1
AND things.id= things.cluster
ORDER BY RAND() LIMIT 1

此查询应随机返回以下任何记录组合(列表 ID):

3
6 and 7
8

我的查询执行此操作,但它也返回 id 4,它不应该出现在这里,因为 num_nodes 将返回 2,但由于集群中第二个事物的状态为 0 (id 5),这对应该被忽略。

我不知道如何使用 num_nodes 输出在纯 mysql 中正确地消除这些对。

如果结果可以是表格中的 2 行,而不是连接的单行,则加分。因此,如果一个孤立记录为 status = 1,则结果为 1 行。如果它是一个成对的记录,两件事都有 status = 1,则为 2 行。

最佳答案

这绕过了 no LIMIT in subqueries 的限制。对 eggyal 的原始答案进行了微调。

  SELECT * FROM things AS t WHERE cluster IN (
SELECT * FROM (
SELECT things.cluster
FROM
things
LEFT JOIN things AS things2 ON (
things2.cluster = things.cluster
AND things2.id != things.cluster
)
WHERE
things.status = 1
AND (things2.id IS NULL OR things2.status = 1)
AND things.id = things.cluster
ORDER BY RAND()
LIMIT 1
) as cheese
)

关于mysql - 根据从子查询返回的行数从 mysql 返回不同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10414528/

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