我有一个表"用户":
drop table users;
CREATE TABLE users(
id int,
user_id int,
phone_number VARCHAR(30),
email VARCHAR(30));
INSERT INTO users
VALUES
(1, 999, 61412308310, 'can@gmail.com '),
(2, 129, 61477708777, 'acdc@gmail.com '),
(3, 213, 61488908495, 'adel99@gmail.com'),
(4, 145, 61477708777, 'austr@gmail.com'),
(5, 214, 61421445777, 'austr@gmail.com'),
(6, 214, 61421445326, 'jango@gmail.com');
我想选择具有重复user_id、重复phone_number或重复email的所有行。
结果应为:
2, 129, 61477708777, 'acdc@gmail.com '
4, 145, 61477708777, 'austr@gmail.com'
5, 214, 61421445777, 'austr@gmail.com'
6, 214, 61421445326, 'jango@gmail.com'
id = 2和id = 4匹配搜索项(电话号码= 61477708777)。id = 5具有行id为4的相同电子邮件,id = 6具有行id为5的相同user_id。
2条答案
按热度按时间2g32fytz1#
递归查询是您所需要的,它可以帮助您声明性地表达为给定种子行添加其他行的推理:
fiddle
omqzjyyz2#
使用不同条件多次将表与其自身联接时出现问题。
尝试:
这个查询首先根据输入的user_id过滤行,然后检查任何匹配的电子邮件地址,也可以为phone_number添加
union
。fiddle