I am running one query and getting cartesian result. I don't know how to structure the query to return the desired result. Desired result being one row of data for each record in the receipts table (10 records) and one row of data for each record in the gifts table (4 records). I should return 14 rows but am returning 40 rows.
donor_info:
CREATE TABLE `donor_info` (
`d_id` INT(10) NOT NULL AUTO_INCREMENT,
`active` VARCHAR(10) NOT NULL DEFAULT '',
`lastname` VARCHAR(50) NOT NULL COLLATE 'latin1_general_cs',
`firstname` VARCHAR(50) NOT NULL DEFAULT '' COLLATE 'latin1_general_cs',
`suffix` VARCHAR(50) NULL DEFAULT NULL,
`spouse` VARCHAR(30) NULL DEFAULT NULL,
`streeth` VARCHAR(60) NULL DEFAULT NULL,
`cityh` VARCHAR(50) NULL DEFAULT NULL,
`stateh` VARCHAR(10) NULL DEFAULT NULL,
`ziph` VARCHAR(20) NULL DEFAULT NULL,
`employerp` VARCHAR(50) NULL DEFAULT NULL,
`streetp` VARCHAR(60) NULL DEFAULT NULL,
`cityp` VARCHAR(50) NULL DEFAULT NULL,
`statep` VARCHAR(10) NULL DEFAULT NULL,
`zipp` VARCHAR(20) NULL DEFAULT NULL,
`employers` VARCHAR(50) NULL DEFAULT NULL,
`streets` VARCHAR(60) NULL DEFAULT NULL,
`citys` VARCHAR(50) NULL DEFAULT NULL,
`states` VARCHAR(10) NULL DEFAULT NULL,
`zips` VARCHAR(20) NULL DEFAULT NULL,
`homephone` VARCHAR(20) NULL DEFAULT NULL,
`cellphp` VARCHAR(20) NULL DEFAULT NULL,
`cellphs` VARCHAR(20) NULL DEFAULT NULL,
`title` VARCHAR(20) NULL DEFAULT NULL,
`emailp` VARCHAR(50) NULL DEFAULT NULL,
`emails` VARCHAR(50) NULL DEFAULT NULL,
`alumnip` VARCHAR(50) NULL DEFAULT NULL,
`alumnis` VARCHAR(50) NULL DEFAULT NULL,
`positionp` VARCHAR(50) NULL DEFAULT NULL,
`workphonep` VARCHAR(20) NULL DEFAULT NULL,
`faxp` VARCHAR(20) NULL DEFAULT NULL,
`positions` VARCHAR(50) NULL DEFAULT NULL,
`workphones` VARCHAR(20) NULL DEFAULT NULL,
`faxs` VARCHAR(20) NULL DEFAULT NULL,
`relationship` VARCHAR(50) NULL DEFAULT NULL,
`socialsite` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`d_id`),
INDEX `active` (`active`, `lastname`, `ziph`, `employerp`)
)
donor_receipts:
CREATE TABLE `donor_receipts` (
`rec_id` INT(10) NOT NULL AUTO_INCREMENT,
`ev_id` INT(10) NOT NULL,
`d_id` INT(10) NOT NULL,
`date` DATE NOT NULL,
`amt` DECIMAL(10,2) NOT NULL,
`type` VARCHAR(10) NOT NULL,
PRIMARY KEY (`rec_id`)
)
donor_gifts:
CREATE TABLE `donor_gifts` (
`gift_id` INT(10) NOT NULL AUTO_INCREMENT,
`d_id` INT(10) NOT NULL DEFAULT '0',
`ev_id` INT(10) NOT NULL DEFAULT '0',
`date` DATE NULL DEFAULT NULL,
`goods` VARCHAR(200) NULL DEFAULT NULL,
`gift_value` DOUBLE NULL DEFAULT NULL,
`services` VARCHAR(200) NULL DEFAULT NULL,
`service_value` VARCHAR(100) NULL DEFAULT NULL,
PRIMARY KEY (`gift_id`)
)
donor_events:
CREATE TABLE `donor_events` (
`ev_id` INT(10) NOT NULL AUTO_INCREMENT,
`ev_name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`ev_id`)
)
query:
SELECT donor_info.lastname,donor_info.firstname,donor_info.d_id,donor_receipts.d_id AS receiptsid,donor_receipts.ev_id AS receiptsevent,donor_receipts.date AS receiptsdate,donor_receipts.amt AS receiptsamt,donor_gifts.d_id AS giftsid,donor_gifts.ev_id,donor_gifts.date,donor_gifts.goods,donor_gifts.gift_value,donor_events.ev_id,donor_events.ev_name
FROM donor_info
LEFT JOIN donor_receipts ON donor_receipts.d_id = donor_info.d_id
LEFT JOIN donor_gifts ON donor_gifts.d_id = donor_info.d_id
JOIN donor_events ON donor_events.ev_id = donor_receipts.ev_id
JOIN donor_events e2 ON e2.ev_id = donor_gifts.ev_id
WHERE lastname LIKE 'Wheeler'
AND firstname LIKE 'Rita'
I tried changing order of fields in the ON clauses but that did not change anything.
Thanks,
Andy