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 查询;合并两个表的主要内容,如果未能解决你的问题,请参考以下文章

mysql 两个表合并查询 字段交换

mysql查询数据怎么合并为一条

mysql合并结果集

MySQL进阶4

mysql多张表合并一张表

mysql 将两个SQL语句查询结果并在一起