Note that the additional ADDRESS table is not needed but is shown for clarification on how it relates to phone numbers.

SELECT RECORDS.LAST_NAME, RECORDS.FULL_NAME, PHONES.NUM, TABLEENTRIES.LONGDESCRIPTION

FROM RECORDS
INNER JOIN CONSTIT_ADDRESS ON RECORDS.ID = CONSTIT_ADDRESS.CONSTIT_ID
INNER JOIN ADDRESS ON CONSTIT_ADDRESS.ADDRESS_ID = ADDRESS.ID
INNER JOIN (CONSTIT_ADDRESS_PHONES
INNER JOIN (PHONES
INNER JOIN TABLEENTRIES ON PHONES.PHONETYPEID = TABLEENTRIES.TABLEENTRIESID) ON CONSTIT_ADDRESS_PHONES.PHONESID = PHONES.PHONESID) ON CONSTIT_ADDRESS.ID = CONSTIT_ADDRESS_PHONES.CONSTITADDRESSID

ORDER BY RECORDS.LAST_NAME

Disclaimer: Blackbaud provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes you are familiar with Structured Query Language and the tools used to create and modify SQL statements and Crystal Reports. Blackbaud Customer Support may help explain the functionality of a particular procedure, but we will not modify, or assist you with modifying, these examples to provide additional functionality.