Задавайте вопросы, мы ответим
Вы не зашли.
По отдельности запросы работают, при обьединении по Юнион выводит совсем далекое. Лефт джоин что-то похожее выводил, но с отклонением: дублирует строки в правой таб вместо прописки нулей.
Как можно бороться?
Неактивен
Следуйте за гласом разума, ибо по отдельности ведет хорошо он Вас, но объединение
у него страдает. И левое присоединение страдает, но если внять ему достойно, то
поборете.
Неактивен
Понял, что бы не быть голословным.
Мой запрос:
SELECT
Rout.`fk_rout_man_driver`,
Rout.`fk_rout_man_out`,
Rout.`fk_rout_man_in`,
Man.`man_surname`,
Man_in.`man_surname`
FROM
Rout, Man,
Man as Man_in
where
Rout.`fk_rout_man_out`=1
and
Man.man_id=Rout.`fk_rout_man_out`
and
Man_in.man_id=Rout.`fk_rout_man_in`
Код для таблиц:
CREATE TABLE Rout (
rout_id int(10) NOT NULL auto_increment,
fk_rout_man_driver int(10) references Man(man_id),
fk_rout_man_out int(10) references Man(man_id),
fk_rout_man_in int(10) references Man(man_id),
fk_rout_goods_id int(10) references Goods(goods_id),
rout_is_active bool default '1',
rout_date date default '01.01.2010',
rout_price float(10,2) UNSIGNED,
rout_count float(10,2) UNSIGNED,
rout_sum float(10,2) UNSIGNED,
rout_info char(50),
PRIMARY KEY (rout_id)
)
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
CREATE TABLE Man(
man_id int(10) NOT NULL auto_increment,
fk_man_type integer references man_type(id),
man_surname char(50) default '',
man_name char(50) default '',
man_name2 char(50) default '',
man_address char(50) default '',
man_city char(50) default 'Біляївка',
man_birth_date date default '01.01.2010',
PRIMARY KEY (man_id)
)
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Обьяснение
Rout.`fk_rout_man_out`=1 означает что будет выбран первый склад погрузки(продажи другим складам) - расход товара.
Второй запрос будет аналогичен первому за отличием
Rout.`fk_rout_man_in`=1 означает что будет выбран первый склад выгрузки - прихода товара на него.
На результирующем запросе мне нужно видеть поля на левую часть таблицы Расход:
Rout.`fk_rout_man_driver`
Rout.`fk_rout_man_out`,
Rout.`fk_rout_man_in`,
Man.`man_surname`,
Man_in.`man_surname`
а также на правую часть Приход:
Rout.`fk_rout_man_driver`
Rout.`fk_rout_man_out`,
Rout.`fk_rout_man_in`,
Man.`man_surname`,
Man_in.`man_surname`
То что хочу достичь кодом
http://s60.radikal.ru/i170/1008/e2/955beacda378.jpg
Отчет по Киевскому складу.
На участке А-G "Склад расход" - откуда был расход, а именно Киев.
На участке А-G "Склад приход" это номера машин.
На участке Н-К "Склад куда выгрузили" - куда приход был, а именно только КИЕВ.
Если участке Н-К "Склад куда выгрузили" появились данные, то
на участке А-G "Склад приход"(колонка С) номера машин выводятся, а "Склад расход"(колонка А) устанавливается в название склада на котором машина грузилась перед отгрузкой на наш склад в на участко Н-К, а именно колонка H.
Задача простая, а вывести не получается.
Неактивен
БД должна выбирать данные, а оформлять в виде красивой таблички их нужно на клиенте. Перекладывать эту работу на БД не есть гуд.
Вы можете написать громоздкую конструкцию: выборка из первого запроса left join пустая строка union второй запрос left join пустая строка. При этом для второго join нужно будет аккуратно написать порядок следования столбцов и условия для колонок А,С.
Неактивен