我正在尝试在父子关系中链接帐户
我在帐户表中有帐户,每个帐户都有自己的 ID“主号码”、“group_id”、电话、联系人、电子邮件、传真。
我需要选择所有有父母的帐户。
这是我定义父级的方式:首先,GROUP_ID 必须相同,并且至少满足以下条件之一
- 如果地址相同
- 如果电话号码相同
- 如果传真相同
- 如果电子邮件相同
- 如果地址的前 6 个字符相同
我创建了一个小提琴来解释我想要做什么 http://sqlfiddle.com/#!2/1974f/5
这是代码
CREATE TABLE accounts(
id int(11),
name varchar(255),
Address1 varchar(255),
phone varchar(10),
fax varchar(10),
email varchar(255),
contact varchar(255),
group_id int(11)
);
INSERT INTO accounts(id, name, Address1, phone, fax, email, contact, group_id)
VALUES
(1, 'Program 1', '123 Main S','7542116654','7456113354','test@test.com','Blah Blah',10),
(2, 'Program 2', '123 Main South','745123456','7024568984','none@test.com','James',10),
(3, 'Program 100', '4512 1st ave','754219648','7452155546','Jim@test.com','Jim',13),
(4, 'Program 55', '12645 West Industry Ave','7023665520','7981234568','mike@test.com','Mike',15),
(4, 'Program Trop', '465431 E Tropicana Ave','7023665520','7024564546','Jay@test.com','Jay',10);
这是我尝试提取数据
SELECT b.id AS parent, a.* FROM accounts AS a
INNER JOIN(
SELECT * FROM accounts
) AS b ON a.id= b.id
WHERE
a.address1 = b.address1
OR LEFT(a.Address1 , 6) = LEFT(b.Address1, 6)
OR (a.phone = b.phone AND LENGTH(b.phone) = 10)
OR (a.fax = b.phone AND LENGTH(b.fax) = 10)
OR (a.contact = b.contact AND LENGTH(b.contact) > 5 )
OR (a.email = b.email AND LENGTH(b.email) > 5 )
最终输出应该在 account 表中给我相同的数据,但如果有的话,会有一个父 ID 列。
我怎样才能做到这一点?