2014-12-03 6 views
2

У меня есть две таблицы: InvoiceMySQL Query; Объединение двух таблиц

id number date  client end client city vracht 
    1 4271 2014-5-28 ALLIN STIHO  ZWOLLE 0 

и Materials.

id number material thickness length width amount price 
    1 14271 Ocoume   10 2500 1220 150 2,3 
    2 14271 Ocoume   15 2500 1220  60 2,3 
    3 14271 Ocoume   18 2500 1220 125 2,3 
    4 14271 Ocoume   22 2500 1220  44 2,3 
    5 14271 Ocoume   40 2150 1000  72 2,3 
    6 14271 Ocoume   18 3100 1530  25 2,3 

В таблице Invoice представлены счета-фактуры. В таблице Materials представлены материалы, которые относятся к счетам-фактурам.

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

number date  client end client city vracht material thickness length width amount price 
14271 2014-5-28 ALLIN STIHO  ZWOLLE  0 Ocoume   10 2500 1220 150 2,3 
14271 2014-5-28 ALLIN STIHO  ZWOLLE  0 Ocoume   15 2500 1220  60 2,3 
14271 2014-5-28 ALLIN STIHO  ZWOLLE  0 Ocoume   18 2500 1220 125 2,3 
14271 2014-5-28 ALLIN STIHO  ZWOLLE  0 Ocoume   22 2500 1220  44 2,3 
14271 2014-5-28 ALLIN STIHO  ZWOLLE  0 Ocoume   40 2150 1000  72 2,3 
14271 2014-5-28 ALLIN STIHO  ZWOLLE  0 Ocoume   18 3100 1530  25 2,3 

Как бы этот запрос выглядеть?

+3

Вы хотите JOIN. –

+0

@ shree.pat18 Как использовать JOIN? –

+0

проверить внутреннее соединение –

ответ

3
select 
    `f`.`number`, 
    `f`.`client`, 
    `f`.`eind_client`, 
    `f`.`city`, 
    `f`.`vracht`, 
     `m`.`material`, 
     `m`.`thickness`, 
     `m`.`length`, 
     `m`.`width`, 
     `m`.`amount`, 
     `m`.`price` 
from 
    `invoice` as `f` 
right outer join 
    `materials` as `m` 
on 
    `f`.`number`=`m`.`number` 
+0

Это работает хорошо, но не идеально. Каждая запись 'материалов' появляется 6 раз. Вы знаете, как это исправить? –

+1

Возможно, попробуйте вместо этого присоединиться к левому (или правому) внешнему соединению. – starko

+0

Хорошо, присоединяйтесь к работам. Я также добавил группу, так что, если вы примете мое редактирование, я могу принять ваш ответ :) –

3
select * from invoice, materials where invoice.number=materials.number 

Вместо *, рекомендуется записать необходимые столбцы ..

+1

Вы должны использовать ключевое слово JOIN наряду с типом соединения, а не этим стилем. –

+0

@ shree.pat18 это, в основном, внутреннее соединение, если вы хотите написать слово «внутреннее соединение», это будет выглядеть как. Select * from invoice внутренние материалы присоединения на invoice.number = materials.number –

+0

Была одинарная символика, но для этого сайта требуется не менее 6 символов. Шиш! – Persixty

1

Вы можете использовать JOIN для извлечения столбцов из обеих таблиц.

пример:

SELECT * 
FROM 
    Invoice AS i, 
    Materials AS m, 
WHERE 
    m.number = i.number 
    AND 
    m.number = 14271 
+0

Это приведет к уменьшению результатов только для числа 14271. –

+0

@DanyalSandeelo: прочитал вопрос? Из таблицы 3 я не вижу другого номера, кроме 14271. –

+0

Это всего лишь пример данных, конечно, ему придется просмотреть все счета-фактуры. –

1

Вы можете использовать соединение.

SELECT * FROM Material as M LEFT JOIN Invoice as I ON I.number=M.Number 
2

Как упоминалось выше, если у вас есть внешний ключ отношения можно использовать JOIN. Это должно дать вам желаемый результат.

Вы могли бы использовать:

Select "columns you need " or "* "from invoice, materials 
WHERE invoice.number = material.number 
+0

Это не работает UNION. UNION объединит наборы результатов, то есть Set 1, а затем Set 2. Он не будет добавлять столбцы из Set 2 в столбцы Set 1, чего хочет OP. –

+0

не будет ли работать с UNION ALL? – Haris

+0

Нет. Взгляните на это: http://stackoverflow.com/questions/905379/what-is-the-difference-between-join-and-union –