我有两张桌子。第一个表有id,名字,姓氏和电话号码列。第二张表有州,区,街区和村庄列。 id列具有唯一值。其他列可以具有重复值。
我想选择所有具有相同名字,姓氏,州,区,街区和村庄值但具有不同电话号码值的记录。
例如:
ID First Name Phone Number District State Block Village
1 Rajesh 9876543210 ABC XYZ GHI PQR
2 Jim 7894561230 WXY DEF JKL SDF
3 Jack 8745963210 EWQ REW YTR POI
4 Rajesh 9856741230 ABC XYZ GHI PQR
5 Jack 8745963210 EWQ REW YTR POI
输出应该包括第1和第4条记录,不是第3和第5条记录,因为它们具有相同的电话号码。
我使用以下查询选择了具有相同电话号码的所有重复行:
SELECT b.phone_mobile, g.countID, b.id
FROM (
SELECT phone_mobile, COUNT( id ) AS countID
FROM contacts
GROUP BY phone_mobile
HAVING COUNT( id ) >1
)g
INNER JOIN contacts b ON b.phone_mobile = g.phone_mobile
现在我没有得到如何选择具有相同名称和位置但电话号码不同的所有行。我需要帮助。
谢谢。
答案 0 :(得分:1)
如果存在具有相同名称,地址但另一个ID和Phone_number的行,则应选择所有行:
SELECT *
FROM contacts c
JOIN address a on c.id=a.id
WHERE EXISTS
(
SELECT 1
FROM contacts c1
JOIN address a1 on c1.id=a1.id
WHERE c1.ID<>c.id
AND c1.Phone_Number<>c.Phone_Number
AND c1.First_Name=c.First_Name
AND a1.District=a.District
AND a1.State=a.State
AND a1.Block=a.Block
AND a1.Village=a.Village
)
答案 1 :(得分:0)
我有一个建议给你。有时候拥有正确的数据库架构是件好事。
我的意思是正确的。如果在制作数据库时使用规范化。您将不得不处理更简单的查询。
观察你的桌子后。我建议在另一个表中使用Phone列。所以你可能会喜欢。每个用户都可以拥有多个电话号码,这样做可以解决查询问题。
所以现在当你把电话栏从桌子上取下来的时候。自动您将拥有具有多个电话号码的不同用户行。每当你拉一个用户时,只需要一个where子句连接到电话号码表就可以了。您的用户拥有多个唯一的电话号码。
Select * from users U,phone P where U.id = P.user_id
或者
Select * from users U, phone P where U.id = P.user_id and U.firstname = 'john'
希望这有帮助