объединение таблиц

iliah

Новичок
объединение таблиц

есть 2 таблицы с (для простоты объяснения) одинаковыми полями
мне нужно выбрать все поля таблицы1, но там где значение соответствующего поля двух таблиц равно получить значение из таблицы2
стоит MySQL 3.23.53
 

Falc

Новичок
Интересно зачем понадобились 2 таблицы с одинаковыми полями?
 

iliah

Новичок
полей на самом деле разное кол-во
в первой таблице хранится во множестве полей подробная информация о товарах
во второй только уникальный идентификатор (такой же есть в первой) и еще два поля, первое из них содержит дополнительную информацию которой нужно заменять значение поля в первой, в зависимости от того, какое было передано значение третьего поля
и из-за третьего поля я не могу обойтись одной таблицей
 

Фанат

oncle terrible
Команда форума
то есть, весь сыр-бор только из-за третьего поля?
а почему его нальзя в первую таблицу-то добавить?
 

Tigr

Новичок
select ..., if (table1.field1==table2.field1, table2.field2, table1.field2) from table1, table2 ...
 

iliah

Новичок
Фанат
тогда эта таблица увеличится (из-за дублирования(!) информации) в несколько раз т.к. различным будет только третье поле из второй таблицы
 

iliah

Новичок
извиняюсь, если сразу нужно было объяснить предметно:
в первой таблице каталог товаров
во второй артикулы товаров (не всех), цены дилеров (которыми и надо менять соответствующие значения из первой таблицы, где цена главной конторы), коды дилеров
т.о. на одну запись в первой таблице - ряд записей во второй, т.к. дилеров много и у всех свои цены
 

Фанат

oncle terrible
Команда форума
самого главного ты и не сказал.
а какой из дилеров выбирается?
 

iliah

Новичок
...where _cat_partners.partner=$моя_переменная...
не знаю существенен ли этот фрагмент для самого запроса?

-~{}~ 19.05.04 15:57:

вроде это мне нужно:
SELECT table1. * , table2. *
FROM table1
LEFT OUTER JOIN table2 ON table1.field2 = table2.field2

а чем отличается left outer join от left join
 

Фанат

oncle terrible
Команда форума
select* from t1 left outer join t2 on t1.art=t2.art having _cat_partners.partner=$моя_переменная

в скрипте сам сравнишь и подставишь

-~{}~ 19.05.04 16:01:

стоп!
стоп.
при чем тут парнер?

товары только одного партнера что ли выбираются??
 

iliah

Новичок
хммм... в том то и дело, что не только этого партнера, но и главные, а where и having дают только партнера

-~{}~ 19.05.04 16:10:

SELECT table1. * , table2. *
FROM table1
LEFT OUTER JOIN table2 ON table1.field2 = table2.field2
WHERE table2.field3=$моя_переменная
OR table2.field3 IS NULL

пока только так получилось, как бы от OR избавиться?
 

Фанат

oncle terrible
Команда форума
пока ты не напишешь словами - по какому критерию выбирать дилера из многих - СЛОВАМИ. СМЫСЛОМ - программу писать бессмысленно
 

iliah

Новичок
его не надо выбирать - table2.field3=$моя_переменная - вот он

(в моей таблице это - _cat_partners.partner=$моя_переменная
не хочу мешать своими идентификаторами)
 

Фанат

oncle terrible
Команда форума
если ты выбираешь все товары только одного партнера, то все эти ухищрения вообще не нужны.

не понимаю я смысла
а если товар есть, но не у того дилера, который в переменной?
 

Falc

Новичок
Какое развитие мысли, начали с одного а пришли совсем к другому :)
 

iliah

Новичок
в ТЗ заложено два паттерна заказа товара:
либо в главной конторе, и тогда цены на все товары ее
либо у какого-либо дилера, и в этом случае цены на товары берутся из "бд" главной конторы (первая таблица) за исключением позиций, для которых дилер установил свои цены (вторая таблица), и вот их надо менять
 

Фанат

oncle terrible
Команда форума
select* from t1 left outer join t2 on t1.art=t2.art having _cat_partners.partner=$моя_переменная

должен выводить всю основную
 

Falc

Новичок
iliah
По мойму тебе надо это:
select ..., if (table2.field3==$моя_переменная, table2.field2, table1.field2)
from ...

>>а чем отличается left outer join от left join
Ничем.
 

Фанат

oncle terrible
Команда форума
отличается тем, что при отсутствии соотвествтующей записи во второй, все равно включает строку из первой
 
Сверху