MySql:设置重复列的限制

时间:2009-12-14 16:51:35

标签: sql mysql

好的,我的桌子上有一个名为style_number的列。 style_number可以重复。我想选择所有内容,但每个样式编号最多只能选择3个。

因此,例如,如果有4行具有style_number =“style 7”,则只会选择其中3个(无论哪个3,任何3个)。

这有意义吗?

我该怎么做?

谢谢!

注意:我使用的是4.1.22

编辑: 澄清一些困惑。我也需要所有其他列,我需要的不仅仅是“样式7”,或者我可以轻松地限制为3.但是例如,如果我的表格在哪里:

style_number |价格| stone_count

"style 7" | 300 | 2
"style 7" | 400 | 3
"style 7" | 500 | 4
"style 7" | 600 | 5
"style 8" | 200| 1
"style 8" | 300 | 2

我会得到这个结果:

"style 7" | 300 | 2
"style 7" | 400 | 3
"style 7" | 500 | 4
"style 8" | 200| 1
"style 8" | 300 | 2

这是否更有意义?

5 个答案:

答案 0 :(得分:1)

我不是MySQL开发人员,但我认为这会给你你想要的东西。虽然没有对性能的承诺:)

SELECT
     T1.id,
     T1.style_number,
     T1.col1,
     T1.col2,
     ...
FROM
     My_Table T1
WHERE
     (
          SELECT
               COUNT(*)
          FROM
               My_Table T2
          WHERE
               T2.style_number = T1.style_number AND
               T2.id < T1.id
     ) < 3

答案 1 :(得分:0)

SELECT * FROM yourTable WHERE style_number = "style 7" LIMIT 3

这会将结果集限制为最多3行,即数据库引擎首先找到的3行。如果您想要某些属性的前三名,则可以在ORDER BY colName之前添加LIMIT 3

答案 2 :(得分:0)

查看LIMIT语法here

答案 3 :(得分:0)

TOP子句允许我们指定要返回的行数。

例如:SELECT TOP 3 * FROM table WHERE style_number =“style 7”

http://www.w3schools.com/sql/sql_top.asp

答案 4 :(得分:0)

由于您的MySQL版本,您的选择可能非常有限;在一个查询中可能无法做到这一点,所以我想我会给出一个替代方案。

一个简单的解决方案是迭代每个样式并使用LIMIT 3参数查询该样式,但您必须执行大量查询。要将这些组合成单个查询,首先要获取所有样式的列表:

SELECT DISTINCT style_number FROM styles;

然后,您可以遍历style_numbers以使用您的编程语言构建SQL字符串,使其如下所示:

SELECT * FROM styles WHERE style_number = 'style 7' LIMIT 3
UNION
SELECT * FROM styles WHERE style_number = 'style 8' LIMIT 3
UNION
...

希望这有帮助。