необходимо сделать выборку из двух таблиц Код (Text): main | id | total | | 1 | 10 | | 2 | 20 | timed | id | id_main | date_from | date_to | total | | 1 | 2 | 2012-03-29 | 2012-04-29 | 50 | сджойнить таблицы так что бы результат был Код (Text): | id | total | | 1 | 10 | | 2 | 50 | sql Код (Text): CREATE TABLE `main` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `total` decimal(10,2) unsigned NOT NULL DEFAULT '0.00', PRIMARY KEY (`id`) ) ENGINE=InnoDB; INSERT INTO `main` VALUES (1,10); INSERT INTO `main` VALUES (2,20); CREATE TABLE `timed` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `id_main` int(11) unsigned NOT NULL DEFAULT '0', `date_from` date DEFAULT NULL, `date_to` date DEFAULT NULL, `total` decimal(10,2) unsigned NOT NULL DEFAULT '0.00', PRIMARY KEY (`id`), KEY `link` (`id_main`) ) ENGINE=InnoDB; INSERT INTO `timed` VALUES (1,2,'2012-03-29','2012-04-29',50); ALTER TABLE `timed` ADD CONSTRAINT `link` FOREIGN KEY (`id_main`) REFERENCES `main` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
решение частичное Код (Text): SELECT main.id AS `id`, COALESCE(timed.total, main.total) AS `total` FROM main LEFT JOIN timed ON main.id = timed.id_main;
так первую строку не из main не выбирает, в таблице timed только одна запись Код (Text): SELECT main.id AS id, COALESCE(timed.total, main.total) AS total FROM main LEFT JOIN timed ON main.id = timed.id_main WHERE SYSDATE() BETWEEN timed.date_from AND timed.date_to
Естественно Код (Text): ... LEFT JOIN timed ON main.id = timed.id_main and SYSDATE() BETWEEN timed.date_from AND timed.date_to