如何在where子句中获取每个名称最多两个条目

15 浏览
0 Comments

如何在where子句中获取每个名称最多两个条目

我想要实现的是在限制条件下选择多个值。\n

SELECT id FROM table WHERE name IN ('Tom', 'Tommy') LIMIT 2

\n我知道这个查询不会按预期工作,但这只是一个例子。\n我对这种情况有点搞不清楚。\n我期望的输出是:\n

id
1
5
4
8

\n为了明确起见,LIMIT将每个变量返回{limit}行。\nLIMIT 3将每个返回3行\n

id
1
5
6
4
8

\n表格:\n

id, name
1, Tom
2, Jeff
3, Jason
4, Tommy
5, Tom
6, Tom
7, Jeff
8, Tommy

0
0 Comments

问题的出现原因:

- 需要在WHERE子句中获取每个名称的最多两个条目。

解决方法:

- 不要使用像上面示例中的union语句。

- 使用WHERE IN (.....)子句为每个用户使用一个SELECT查询,并在后面进行union操作。

- 在最后添加Order by name,id以按照名称和ID排序。

- 如果需要union多个名称,可以构建一个存储过程或在所使用的语言中构建查询,如PHP

- 在每个查询中至少需要一个order by id,以确保每个名称的ID按照升序排列。

如下是整理后的文章:

为了在WHERE子句中获取每个名称的最多两个条目,我们不能简单地使用类似于上面示例中的union语句。相反,我们需要为每个用户在WHERE IN子句中使用一个SELECT查询,并在后面进行union操作。

此外,我们还需要在最后添加Order by name,id,以按照名称和ID对结果进行排序。这样可以确保结果按照预期的顺序排列。

如果我们需要union多个名称,可以考虑构建一个存储过程或在所使用的语言中构建查询,如PHP。这样可以更好地管理和组织代码。

需要注意的是,在每个查询中至少需要一个order by id,以确保每个名称的ID按照升序排列。否则,结果中的ID可能以不同的顺序出现,与预期不符。

0
0 Comments

问题的出现原因是需要从给定的数据中获取每个姓名最多两个条目,但是查询语句中没有明确的限制条件。解决方法是添加限制条件 WHERE t.rank < 2 来筛选出每个姓名最多两个条目的数据。

首先,根据姓名升序对数据进行排序:

SELECT 
     id,
     `name`
FROM your_table
WHERE `name` IN ('Tom','Tommy')
ORDER BY `name`

排序后的结果如下:

id  name
1   Tom
5   Tom
6   Tom
4   Tommy
8   Tommy

然后,使用 变量来跟踪每个姓名是否已经出现过,使用 变量为每个姓名分配一个排名。如果当前姓名已经出现过,则将排名加1(类似于学号)。

通过上述两个变量,中间表的结果如下:

id  name   rank
1   Tom     0(第一次出现,排名为0)
5   Tom     1(第二次出现,排名为1)
6   Tom     2(第三次出现,排名为2)
4   Tommy   0(第一次出现,排名为0)
8   Tommy   1(第二次出现,排名为1)

最后,根据 rank < 2 的条件筛选出每个姓名最多两个条目的数据。

0