За последние 24 часа нас посетили 50424 программиста и 1690 роботов. Сейчас ищут 1106 программистов ...

Помощь по JOIN

Тема в разделе "MySQL", создана пользователем DZEN, 29 мар 2012.

  1. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    необходимо сделать выборку из двух таблиц
    Код (Text):
    1. main
    2. | id | total |
    3. | 1  |    10 |
    4. | 2  |    20 |
    5. timed
    6. | id | id_main | date_from  | date_to    | total |
    7. | 1  |       2 | 2012-03-29 | 2012-04-29 |    50 |
    сджойнить таблицы так что бы результат был
    Код (Text):
    1. | id | total |
    2. | 1  |    10 |
    3. | 2  |    50 |
    sql
    Код (Text):
    1. CREATE TABLE `main` (
    2.   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    3.   `total` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',
    4.   PRIMARY KEY (`id`)
    5. ) ENGINE=InnoDB;
    6. INSERT INTO `main` VALUES (1,10);
    7. INSERT INTO `main` VALUES (2,20);
    8. CREATE TABLE `timed` (
    9.   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    10.   `id_main` int(11) unsigned NOT NULL DEFAULT '0',
    11.   `date_from` date DEFAULT NULL,
    12.   `date_to` date DEFAULT NULL,
    13.   `total` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',
    14.   PRIMARY KEY (`id`),
    15.   KEY `link` (`id_main`)
    16. ) ENGINE=InnoDB;
    17. INSERT INTO `timed` VALUES (1,2,'2012-03-29','2012-04-29',50);
    18. ALTER TABLE `timed`
    19. ADD CONSTRAINT `link` FOREIGN KEY (`id_main`) REFERENCES `main` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
     
  2. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    решение частичное
    Код (Text):
    1. SELECT main.id AS `id`,
    2.    COALESCE(timed.total, main.total) AS `total`
    3. FROM main
    4. LEFT JOIN timed
    5. ON main.id = timed.id_main;
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    т.е. у тебя есть решение. в чем вопрос то?
     
  4. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    так первую строку не из main не выбирает, в таблице timed только одна запись
    Код (Text):
    1. SELECT main.id AS id,
    2.    COALESCE(timed.total, main.total) AS total
    3. FROM main
    4. LEFT JOIN timed
    5. ON main.id = timed.id_main
    6. WHERE SYSDATE() BETWEEN timed.date_from AND timed.date_to
     
  5. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Естественно ;)

    Код (Text):
    1. ...
    2. LEFT JOIN timed
    3. ON main.id = timed.id_main and SYSDATE() BETWEEN timed.date_from AND timed.date_to
     
  6. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    тваю дивизию, ну точно очки надо покупать. спасибо.