SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.08.2010 09:26:29

111111
Участник
Зарегистрирован: 25.08.2010
Сообщений: 2

Оператор Join (мускул)

По отдельности запросы работают, при обьединении по Юнион выводит совсем далекое. Лефт джоин что-то похожее выводил, но с отклонением: дублирует строки в правой таб вместо прописки нулей.
Как можно бороться?

Неактивен

 

#2 25.08.2010 10:14:42

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Оператор Join (мускул)

Следуйте за гласом разума, ибо по отдельности ведет хорошо он Вас, но объединение
у него страдает. И левое присоединение страдает, но если внять ему достойно, то
поборете.

Неактивен

 

#3 25.08.2010 17:44:24

111111
Участник
Зарегистрирован: 25.08.2010
Сообщений: 2

Re: Оператор Join (мускул)

Понял, что бы не быть голословным.
Мой запрос:

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.
Задача простая, а вывести не получается.

Неактивен

 

#4 25.08.2010 18:19:31

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Оператор Join (мускул)

БД должна выбирать данные, а оформлять в виде красивой таблички их нужно на клиенте. Перекладывать эту работу на БД не есть гуд.

Вы можете написать громоздкую конструкцию: выборка из первого запроса left join пустая строка union второй запрос left join пустая строка. При этом для второго join нужно будет аккуратно написать порядок следования столбцов и условия для колонок А,С.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson