Am besten installierst Du SQLite Manager, ein PlugIn für Firefox und probierst ein bisschen mit der Adressdatenbank aus "~/Library/Application Support/AddressBook/AddressBook-v22.abcddb" herum. (Vorher natürlich ein Backup ziehen!) Die jeweiligen Daten aus den Tabellen werden immer verknüpft, um z.B. die Adressdaten einem Kontakt aus ZABCDRECORD zuzuordnen. Eine Verknüpfung über die Felder "z_pk" und "z_ent" scheint sich anzubieten:
Ein erster SELECT heißt dann:
Code:
SELECT zfirstname, zlastname, zstreet, zzipcode, zcity
FROM zabcdrecord AS rec
JOIN zabcdpostaladdress AS postal ON (
rec.z_pk = postal.zowner and
rec.z_ent = postal.z19_owner);
Sicherlich stellst Du fest, daß nur die Kontakte mit gepflegter Adresse ausgegeben werden. Abhilfe schafft ein sog. "Outer Join": es wird jeder Kontakt ausgegeben, wenn vorhanden mit Adresse:
Code:
SELECT zfirstname, zlastname, zstreet, zzipcode, zcity
FROM zabcdrecord AS rec
LEFT OUTER JOIN zabcdpostaladdress AS postal ON (
rec.z_pk = postal.zowner and
rec.z_ent = postal.z19_owner);
Nun basteln wir noch analog dazu die email-Adresse und fragen im WHERE-Teil nur nach denen ohne email-adresse:
Code:
SELECT zfirstname, zlastname, zstreet, zzipcode, zcity, zaddress
FROM zabcdrecord AS rec
LEFT OUTER JOIN zabcdpostaladdress AS postal ON (
rec.z_pk = postal.zowner and
rec.z_ent = postal.z19_owner)
LEFT OUTER JOIN zabcdemailaddress AS email ON (
rec.z_pk = email.zowner and
rec.z_ent = email.z19_owner)
WHERE zaddress is null;
Den ganzen Kram kann man auch in ein shellscript packen:
Code:
echo ".mode csv
SELECT zfirstname, zlastname, zstreet, zzipcode, zcity, zaddress
FROM zabcdrecord AS rec
LEFT OUTER JOIN zabcdpostaladdress AS postal ON (
rec.z_pk = postal.zowner and
rec.z_ent = postal.z19_owner)
LEFT OUTER JOIN zabcdemailaddress AS email ON (
rec.z_pk = email.zowner and
rec.z_ent = email.z19_owner)
WHERE zaddress is null;" |
sqlite3 ~/Library/Application\ Support/AddressBook/AddressBook-v22.abcddb
SQL ist halt eine komplette Sprache und SQLite3 bietet eine ziemlich vollständige Implementation davon. Du wirst ein bisschen lesen müssen; meine kleinen Beispiele helfen aber hoffentlich schon mal für den ersten Einstieg.
Viel Spaß!
Lesezeichen