2014-12-03 123 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。 – 2014-12-03 09:17:00

+0

@ shree.pat18如何使用JOIN? – 2014-12-03 09:17:52

+0

檢查內部連接 – 2014-12-03 09:17:55

回答

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次..你知道如何解決這個問題嗎? – 2014-12-03 09:38:08

+1

也許試試加入使用左(或右)外連接。 – starko 2014-12-03 09:40:09

+0

好吧,正確加入作品..我也加了group by,所以如果你接受我的編輯,我可以接受你的回答:) – 2014-12-03 09:57:36

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

取而代之*的,建議記下所需的列..

+1

您應該使用JOIN關鍵字以及連接的類型而不是此樣式。 – 2014-12-03 09:22:38

+0

@ shree.pat18這基本上是內部連接,如果你想寫內部連接這個詞,它會像..從invoice內部連接材料select * from invoice.number = materials.number – 2014-12-03 09:23:36

+0

有一個單個字符的錯字,但是該網站至少需要6個字符的編輯。烤羊! – Persixty 2014-12-03 09:24:24

1

您可以使用JOIN來從兩個表中獲取列。

例如:

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

這隻會減少14271號的結果。 – 2014-12-03 09:25:48

+0

@DanyalSandeelo:看完這個問題了嗎?從表3可以看出,除14271之外沒有其他數字。 – 2014-12-03 09:27:37

+0

這只是一個示例數據,當然他必須查看所有發票。 – 2014-12-03 09:29:08

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將組合結果集,即集合1和集合2,它不會將集合2的列添加到集合1的列中,這是OP需要的。 – 2014-12-03 09:29:57

+0

不適用於UNION ALL嗎? – Haris 2014-12-03 09:33:43

+0

沒有。看看這個:http://stackoverflow.com/questions/905379/what-is-the-difference-between-join-and-union – 2014-12-03 09:36:29