親子関係のアカウントを連携させようとしています
アカウントテーブルにアカウントがあり、各アカウントには独自のID「プライマリ番号」、「group_id」、電話、連絡先、電子メール、ファックスがあります。
親を持つすべてのアカウントを選択する必要があります。
親を定義する方法は次のとおりです。最初に GROUP_ID が同じである必要があり、次の基準の少なくとも 1 つを満たしている必要があります。
- 住所が同じなら
- 電話番号が同じなら
- ファックスが同じ場合
- メールが同じなら
- アドレスの最初の 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 )
最終的な出力では、アカウント テーブルに同じデータが表示されますが、親 ID の列がある場合は列が表示されます。
これどうやってするの?