mysql获取相异行,MySQL查询查找与另一行具有相同值的所有行

My database contains rows that generally look like:

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 ║

╚════╩══════════╩════════╝

I need to find all the actual records where the PersonId and the ItemId column match some other record in the database for those two columns....

| 1 | 123 | 456

| 2 | 123 | 456

| 5 | 123 | 456

| 4 | 444 | 456

| 7 | 444 | 456

How can I go about getting these results?

解决方案

You can do joins to get around with duplicate records.

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

OUTPUT

╔════╦══════════╦════════╗

║ ID ║ PERSONID ║ ITEMID ║

╠════╬══════════╬════════╣

║ 1 ║ 123 ║ 456 ║

║ 2 ║ 123 ║ 456 ║

║ 5 ║ 123 ║ 456 ║

║ 4 ║ 444 ║ 456 ║

║ 7 ║ 444 ║ 456 ║

╚════╩══════════╩════════╝

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值