MySQL 查询;合并两个表
Posted
技术标签:
【中文标题】MySQL 查询;合并两个表【英文标题】:MySQL Query; Combine two tables 【发布时间】:2015-01-31 18:39:36 【问题描述】:我有两张桌子:Invoice
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
这个查询看起来如何?
【问题讨论】:
@shree.pat18 如何使用 JOIN? 检查内部连接 这两个表是如何链接的?哪些列? @MZeinstra 您总是可以从文档开始:dev.mysql.com/doc/refman/5.0/en/join.html 有外键关系吗? 【参考方案1】: select * from invoice, materials where invoice.number=materials.number
建议写下所需的列,而不是*。
【讨论】:
您应该使用 JOIN 关键字以及连接类型而不是这种样式。 @shree.pat18 这基本上是inner join,如果你想写inner join这个词,就像.. select * from invoice inner join materials on invoice.number=materials.number 有一个字符拼写错误,但该网站需要至少 6 个字符的编辑。嘘!【参考方案2】:您可以使用 JOIN 从两个表中检索列。
示例:
SELECT *
FROM
Invoice AS i,
Materials AS m,
WHERE
m.number = i.number
AND
m.number = 14271
【讨论】:
@DanyalSandeelo:读过这个问题吗?从表 3 中,我没有看到除 14271 之外的任何其他数字。 这是一个值得争论的愚蠢话题。 OP 没有要求提供所有记录。这是一个足够简单的查询,可以理解和修改。【参考方案3】:您可以使用连接。
SELECT * FROM Material as M LEFT JOIN Invoice as I ON I.number=M.Number
【讨论】:
【参考方案4】:如前所述,如果您有外键关系,您可以使用 JOIN.
这应该会给您想要的结果。
你可以使用:
Select "columns you need " or "* "from invoice, materials
WHERE invoice.number = material.number
【讨论】:
这不是 UNION 的工作方式。 UNION 将组合结果集,即 Set 1 后跟 Set 2。它不会将 Set 2 中的列附加到 Set 1 的列,这是 OP 想要的。 没有。看看这个:***.com/questions/905379/…【参考方案5】: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`
【讨论】:
这很好用,但并不完美。materials
的每条记录都显示了 6 次。你知道如何解决这个问题吗?
也许尝试使用左(或右)外连接代替加入。
好的,正确的加入工作.. 我还添加了 group by,所以如果你接受我的编辑,我可以接受你的回答 :)
抱歉,这个编辑有误。我不需要 Group by.. 请接受我的编辑 :)以上是关于MySQL 查询;合并两个表的主要内容,如果未能解决你的问题,请参考以下文章