Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите объединить 2 таблицы, [MySQL] 
V
    Опции темы
zluka
Дата 10.5.2010, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 27.7.2006

Репутация: нет
Всего: 2



Есть 2 таблицы:
clients
- id
- cli_name
- cli_addr
shipment
- id    
- packet_number 
- sender_id    
- recipient_id
Должно выйти что-то типа этого:
Код

|ship_id|packet_number|sender_name|sender_addr|recipient_name|recipient_addr|
----------------------------------------------------------------------------------------------------------
|   1 | ME454544445  |   Иванов   | Улица1    |  Петрова    |   Улица2    |

Нужно объеденить 2 таблицы. Долго мучаюсь. INNER JOIN как раз объединяет все нормально. Проблема лежит как раз в sender_id  и recipient_id.
Написал тут что-то, но запрос выдает 2 записи:
Код

SELECT shipment.id, shipment.packet_number, shipment.sender_id, shipment.recipient_id, clients.id, clients.cli_name, as sender_name, clients.cli_addr as sender_addr FROM shipment 
INNER JOIN clients ON shipment.sender_id = clients.id 
UNION
SELECT shipment.id, shipment.packet_number, shipment.sender_id, shipment.recipient_id, clients.id, clients.cli_name as recipient_name, clients.cli_addr as recipient_addr FROM shipment
INNER JOIN clients ON shipment.recipient_id = clients.id

Спасибо за помощь.

Это сообщение отредактировал(а) zluka - 10.5.2010, 18:30


--------------------
user posted image
PM MAIL   Вверх
Akina
Дата 10.5.2010, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Код

SELECT
  shipment.id
, shipment.packet_number
, shipment.sender_id
, shipment.recipient_id
, c1.cli_name as sender_name
, c1.cli_addr as sender_addr
, c2.cli_name as recipient_name
, c2.cli_addr as recipient_addr 
FROM shipment 
INNER JOIN clients as c1 
  ON shipment.sender_id = c1.id 
INNER JOIN clients as c2 
  ON shipment.recipient_id = c2.id



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
zluka
  Дата 12.5.2010, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 27.7.2006

Репутация: нет
Всего: 2



Спасибо, то что надо=)


--------------------
user posted image
PM MAIL   Вверх
zluka
Дата 15.7.2010, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 27.7.2006

Репутация: нет
Всего: 2



Еще раз привет. 
Теперь нужно присоединить еще одну таблицу (продукты) и подсчитать количество этих продуктов, где shipment.id равно products.shipment_id
Код:
Код

SELECT
  shipment.id
, shipment.packet_number
, shipment.sender_id
, shipment.recipient_id
, c1.cli_name as sender_name
, c1.cli_addr as sender_addr
, c2.cli_name as recipient_name
, c2.cli_addr as recipient_addr 
, products.id AS prod_id
, products.shipment_id
FROM shipment 
INNER JOIN clients as c1 
  ON shipment.sender_id = c1.id 
INNER JOIN clients as c2 
  ON shipment.recipient_id = c2.id
LEFT JOIN products
  ON (SELECT COUNT(products.id) AS prod_count FROM products WHERE  products.shipment_id = shipment.id) 

Вобщем не выводит prod_count. Наверное что-то не так пишу.

Это сообщение отредактировал(а) zluka - 15.7.2010, 12:23


--------------------
user posted image
PM MAIL   Вверх
Frees
Дата 15.7.2010, 12:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 2
Всего: 54



Код

SELECT
  shipment.id
, shipment.packet_number
, shipment.sender_id
, shipment.recipient_id
, c1.cli_name as sender_name
, c1.cli_addr as sender_addr
, c2.cli_name as recipient_name
, c2.cli_addr as recipient_addr 
, products.shipment_id,
COUNT(products.id)
FROM shipment 
INNER JOIN clients as c1 
  ON shipment.sender_id = c1.id 
INNER JOIN clients as c2 
  ON shipment.recipient_id = c2.id
LEFT JOIN products
  ON (products.shipment_id = shipment.id) 
group by
  shipment.id
, shipment.packet_number
, shipment.sender_id
, shipment.recipient_id
, c1.cli_name
, c1.cli_addr 
, c2.cli_name 
, c2.cli_addr 
, products.shipment_id


Добавлено @ 12:31
или так

Код

SELECT
  shipment.id
, shipment.packet_number
, shipment.sender_id
, shipment.recipient_id
, c1.cli_name as sender_name
, c1.cli_addr as sender_addr
, c2.cli_name as recipient_name
, c2.cli_addr as recipient_addr 
, sl.shipment_id,
sl.prod_count
FROM shipment 
INNER JOIN clients as c1 
  ON shipment.sender_id = c1.id 
INNER JOIN clients as c2 
  ON shipment.recipient_id = c2.id
LEFT JOIN  (SELECT COUNT(products.id) AS prod_count, products.shipment_id FROM products group by products.shipment_id) as sl on  sl.shipment_id = shipment.id 


Это сообщение отредактировал(а) Frees - 15.7.2010, 12:34


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0446 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.