My sql returns a cartesian table with too many rows. I need a table with one row for each donor_gift and one row for each donor_receipt. Is this possible?
Andy
CREATE TABLE `donor_info` (
`d_id` INT(10) NOT NULL AUTO_INCREMENT,
`lastname` VARCHAR(50) NOT NULL,
`firstname` VARCHAR(50) NOT NULL,
PRIMARY KEY (`d_id`)
)
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,
PRIMARY KEY (`gift_id`)
)
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`)
)
CREATE TABLE `donor_events` (
`ev_id` INT(10) NOT NULL AUTO_INCREMENT,
`ev_name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`ev_id`)
)
SQL
SELECT donor_info.lastname,donor_info.firstname,donor_info.employerp,donor_info.emailp,donor_info.d_id,donor_receipts.d_id,donor_receipts.ev_id,donor_receipts.date AS Cashdate,donor_receipts.amt AS Cashamt,donor_gifts.d_id,donor_gifts.ev_id,donor_gifts.date AS Giftdate,donor_gifts.goods AS Gift,donor_gifts.gift_value AS Giftvalue,donor_events.ev_id,donor_events.ev_name
FROM donor_info
LEFT JOIN donor_receipts ON donor_info.d_id = donor_receipts.d_id
LEFT JOIN donor_gifts ON donor_info.d_id = donor_receipts.d_id
LEFT JOIN donor_events ON ((donor_receipts.ev_id = donor_events.ev_id)||(donor_gifts.ev_id=donor_events.ev_id))