Mysql查询查找与另一行具有相同值的所有行

标签 mysql sql

我的数据库包含的行通常如下所示:

PersonItem
__________
id
personId
itemId

╔════╦══════════╦════════╗
║ ID ║ PERSONID ║ ITEMID ║
╠════╬══════════╬════════╣
║  1 ║      123 ║    456 ║
║  2 ║      123 ║    456 ║
║  3 ║      123 ║    555 ║
║  4 ║      444 ║    456 ║
║  5 ║      123 ║    456 ║
║  6 ║      333 ║    555 ║
║  7 ║      444 ║    456 ║
╚════╩══════════╩════════╝

我需要找到所有实际记录,其中 PersonId 和 ItemId 列与数据库中这两列的其他记录相匹配....

| 1  |   123    |   456
| 2  |   123    |   456
| 5  |   123    |   456

| 4  |   444    |   456
| 7  |   444    |   456

我怎样才能得到这些结果?

最佳答案

您可以进行联接以避开重复记录。

SELECT  a.*
FROM    TableName a
        INNER JOIN
        (
            SELECT  PersonID, ItemID, COUNT(*) totalCount
            FROM    TableName
            GROUP   BY PersonID, ItemID
            HAVING  COUNT(*) > 1
        ) b ON  a.PersonID = b.PersonID AND
                a.ItemID = b.ItemID

输出

╔════╦══════════╦════════╗
║ ID ║ PERSONID ║ ITEMID ║
╠════╬══════════╬════════╣
║  1 ║      123 ║    456 ║
║  2 ║      123 ║    456 ║
║  5 ║      123 ║    456 ║
║  4 ║      444 ║    456 ║
║  7 ║      444 ║    456 ║
╚════╩══════════╩════════╝

关于Mysql查询查找与另一行具有相同值的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16803592/

相关文章:

php - php函数中sql查询中的假值仅在引号中有效

mysql - 连接上的 WHERE 子句使执行时间增加 4 秒

mysql - 错误 "Ambiguous column name SubscriberKey"

MySQL 列出带有链接的类别

mysql - Navicat SQL Consol 在表中,设置记录=本身/10

MYSQL 数据库 ID

sql - 获取符合 varchar 文本的 SQL Var 的值

sql - 按 float 日期范围分组

sql - 如何用SQL Server实现LIMIT?

mysql - 通过zapier调用存储过程但没有插入行