首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于选择重复记录的SQL语句出现2次以上

用于选择重复记录的SQL语句出现2次以上
EN

Stack Overflow用户
提问于 2013-01-27 04:34:12
回答 5查看 21.9K关注 0票数 4

我需要帮助来解决这个问题。我有一个包含记录的表,有一个字段sku,在这个记录中,sku出现了多次。表结构类似于以下rid|id|sku|name

rid是auto_increment,其中的id是varchar,如果任何sku在表中多次可用,则记录如下所示

代码语言:javascript
运行
复制
rid  id  sku     name
---  --  ------  --------------
1    3   rs-123  test product
2    3   rs-123  test product
3    4   rs-125  test product 2
4    4   rs-125  test product 2
5    4   rs-125  test product 2
6    6   rs-126  test product 3

我使用此sql语句来获取只出现一次的记录

代码语言:javascript
运行
复制
SELECT *
FROM test
GROUP BY id
HAVING ( COUNT(id) = 1 )

这带来了只添加一次的记录,因此根据上面的记录,只有RID6是输出

我尝试修改上面的代码,以获得添加了2次的记录的结果

代码语言:javascript
运行
复制
    SELECT * FROM test 
GROUP BY id 
HAVING ( COUNT(id) = 2 )

我得到的结果是那些被添加了2次的记录,但问题是输出只出现了1条这样的记录;

代码语言:javascript
运行
复制
rid  id  sku     name
---  --  ------  ------------
1    3   rs-123  test product

我需要获取在数据库中添加了2次的所有记录行。请帮帮忙

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-27 04:51:30

代码语言:javascript
运行
复制
SELECT t.rid
     , t.id
     , t.sku
     , t.name
  FROM test t
  JOIN ( SELECT s.sku 
           FROM test s 
          GROUP BY s.sku
         HAVING COUNT(1) > 1
       ) d
    ON d.sku = t.sku

别名为d的内联视图返回在表中出现多次的sku值。我们可以将该查询的结果连接到表中,以获得sku匹配的所有行。

idsku可以互换吗?这对我来说不太清楚。(如果id依赖于sku,而sku依赖于id,则可以在该查询中将对sku的引用替换为对id的引用。

票数 7
EN

Stack Overflow用户

发布于 2013-01-27 04:56:56

测试驱动的查询设计-- TDQD。

查找多次出现的SKU

代码语言:javascript
运行
复制
SELECT sku
  FROM test
 GROUP BY sku
HAVING COUNT(*) > 1

查找SKU多次出现的所有行的详细信息

代码语言:javascript
运行
复制
SELECT t.*
  FROM test AS t
  JOIN (SELECT sku
          FROM test
         GROUP BY sku
        HAVING COUNT(*) > 1
       ) AS s
    ON t.sku = s.sku
票数 4
EN

Stack Overflow用户

发布于 2013-01-27 04:43:04

代码语言:javascript
运行
复制
CREATE TABLE test
(rid INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,id INT NOT NULL
,sku VARCHAR(12) NOT NULL
,name VARCHAR(20) NOT NULL
);

INSERT INTO test VALUES 
(1,3,'rs-123','test product'),
(2,3,'rs-123','test product'),
(3,4,'rs-125','test product 2'),
(4,4,'rs-125','test product 2'),
(5,4,'rs-125','test product 2'),
(6,6,'rs-126','test product 3');

SELECT x.* FROM test x JOIN test y ON y.id = x.id GROUP BY x.rid HAVING COUNT(*) > 1;
+-----+----+--------+----------------+
| rid | id | sku    | name           |
+-----+----+--------+----------------+
|   1 |  3 | rs-123 | test product   |
|   2 |  3 | rs-123 | test product   |
|   3 |  4 | rs-125 | test product 2 |
|   4 |  4 | rs-125 | test product 2 |
|   5 |  4 | rs-125 | test product 2 |
+-----+----+--------+----------------+
5 rows in set (0.01 sec)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14541307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档