Mysql Left加入重复行

时间:2015-10-08 00:03:49

标签: mysql phpmyadmin

我有2张桌子,我想加入。第二张桌子很棘手,我会尽力在这里解释一下

以下表格存在疑问:
1)表1 2)table2

表1

+---------+-----------+-------+-----------+------------+-----------------+
| Orderid |   name    |  Sku  | row_total | tax_amount | discount_amount |
+---------+-----------+-------+-----------+------------+-----------------+
|     002 | Product1  | Sku1  |       100 | 0.5        | 1.5             |
|     002 | Product2  | Sku2  |       200 | 0.5        | 1               |
|     002 | Product3  | Sku3  |       300 | 0.5        | 0               |
|     002 | Product4  | Sku4  |       400 | 0.5        | 5               |
|     002 | Product5  | Sku5  |       500 | 0.5        | 50              |
|     002 | Product6  | Sku6  |       600 | 0.5        | 0.5             |
|     002 | Product7  | Sku7  |       700 | 0.0        | 10              |
|     002 | Product8  | Sku8  |       800 | 1.5        | 0               |
|     002 | Product9  | Sku9  |       900 | 2          | 2               |
|     002 | Product10 | Sku10 |      1000 | 3          | 30              |
+---------+-----------+-------+-----------+------------+-----------------+

表2

+----------+--------+------------+
| MOrderid | mowner | mrealorder |
+----------+--------+------------+
|      002 |     95 |    3333333 |
|      002 |    100 |    3333333 |
|      002 |    320 |    3333333 |
|      002 |     95 |    3333333 |
|      002 |    504 |    3333333 |
|      002 |    112 |    3333333 |
|      002 |     95 |    3333333 |
|      002 |     99 |    3333333 |
|      002 |    106 |    3333333 |
|      002 |     11 |    3333333 |
+----------+--------+------------+

这是我正在编写的查询以获得我想要的输出,我试图显示我正在寻找的最终结果。

SELECT DISTINCT o.Orderid, o.name, o.Sku, o.row_total, o.tax_amount, o.discount_amount, m.mowner
FROM table1 o
JOIN table2 m ON ( o.Orderid = m.Morderid )

以下是运行后得到的结果

+---------+-----------+-------+-----------+------------+-----------------+--------+
| Orderid |   name    |  Sku  | row_total | tax_amount | discount_amount | mowner |
+---------+-----------+-------+-----------+------------+-----------------+--------+
|     002 | Product1  | Sku1  |       100 | 0.5        | 1.5             |     95 |
|     002 | Product2  | Sku2  |       200 | 0.5        | 1               |     95 |
|     002 | Product3  | Sku3  |       300 | 0.5        | 0               |     95 |
|     002 | Product4  | Sku4  |       400 | 0.5        | 5               |     95 |
|     002 | Product5  | Sku5  |       500 | 0.5        | 50              |     95 |
|     002 | Product6  | Sku6  |       600 | 0.5        | 0.5             |     95 |
|     002 | Product7  | Sku7  |       700 | 0.0        | 10              |     95 |
|     002 | Product8  | Sku8  |       800 | 1.5        | 0               |     95 |
|     002 | Product9  | Sku9  |       900 | 2          | 2               |     95 |
|     002 | Product10 | Sku10 |      1000 | 3          | 30              |     95 |
|     002 | Product1  | Sku1  |       100 | 0.5        | 1.5             |    100 |
|     002 | Product2  | Sku2  |       200 | 0.5        | 1               |    100 |
|     002 | Product3  | Sku3  |       300 | 0.5        | 0               |    100 |
|     002 | Product4  | Sku4  |       400 | 0.5        | 5               |    100 |
|     002 | Product5  | Sku5  |       500 | 0.5        | 50              |    100 |
|     002 | Product6  | Sku6  |       600 | 0.5        | 0.5             |    100 |
|     002 | Product7  | Sku7  |       700 | 0.0        | 10              |    100 |
|     002 | Product8  | Sku8  |       800 | 1.5        | 0               |    100 |
|     002 | Product9  | Sku9  |       900 | 2          | 2               |    100 |
|     002 | Product10 | Sku10 |      1000 | 3          | 30              |    100 |
|     002 | Product1  | Sku1  |       100 | 0.5        | 1.5             |    320 |
|     002 | Product2  | Sku2  |       200 | 0.5        | 1               |    320 |
|     002 | Product3  | Sku3  |       300 | 0.5        | 0               |    320 |
|     002 | Product4  | Sku4  |       400 | 0.5        | 5               |    320 |
|     002 | Product5  | Sku5  |       500 | 0.5        | 50              |    320 |
|     002 | Product6  | Sku6  |       600 | 0.5        | 0.5             |    320 |
|     002 | Product7  | Sku7  |       700 | 0.0        | 10              |    320 |
|     002 | Product8  | Sku8  |       800 | 1.5        | 0               |    320 |
|     002 | Product9  | Sku9  |       900 | 2          | 2               |    320 |
|     002 | Product10 | Sku10 |      1000 | 3          | 30              |    320 |
+---------+-----------+-------+-----------+------------+-----------------+--------+

我想要的输出

+---------+-----------+-------+-----------+------------+-----------------+--------+
| Orderid |   name    |  Sku  | row_total | tax_amount | discount_amount | mowner |
+---------+-----------+-------+-----------+------------+-----------------+--------+
|     002 | Product1  | Sku1  |       100 | 0.5        | 1.5             |    320 |
|     002 | Product2  | Sku2  |       200 | 0.5        | 1               |     95 |
|     002 | Product3  | Sku3  |       300 | 0.5        | 0               |     95 |
|     002 | Product4  | Sku4  |       400 | 0.5        | 5               |    100 |
|     002 | Product5  | Sku5  |       500 | 0.5        | 50              |    106 |
|     002 | Product6  | Sku6  |       600 | 0.5        | 0.5             |    504 |
|     002 | Product7  | Sku7  |       700 | 0.0        | 10              |    112 |
|     002 | Product8  | Sku8  |       800 | 1.5        | 0               |     95 |
|     002 | Product9  | Sku9  |       900 | 2          | 2               |     99 |
|     002 | Product10 | Sku10 |      1000 | 3          | 30              |     11 |
+---------+-----------+-------+-----------+------------+-----------------+--------+

问题

此处的主要问题是mowner列。它会不断重复每个项目,直到所有mowner完成。有人可以调查一下,并试着帮助我得到我在这个问题中显示的预期结果。

1 个答案:

答案 0 :(得分:1)

好的!,花了一些时间,但是如果你仍然想要两个表,(你可以只将行mowner和mrealorder添加到表1)你需要添加一行,在这个小提琴中你可以执行两个查询并查看结果,您当前的查询是:

    SELECT DISTINCT o.Orderid, o.name, o.Sku, o.row_total, o.tax_amount, o.discount_amount, m.mowner
    FROM table1 o
    JOIN table2 m ON ( o.Orderid = m.Morderid )

我改变了一点

    SELECT DISTINCT o.Orderid, o.name, o.Sku, o.row_total, o.tax_amount, o.discount_amount, m.mowner
    FROM table1 o
    JOIN table2 m ON ( o.Orderid = m.Morderid and o.name = m.Mname)

你可以在这个小提琴中看到整个例子http://sqlfiddle.com/#!9/73bde/3

由于割草者的结果与你“渴望”的结果不一样,你需要解释如何获得该值,当你这样做时,我会把我当前的答案修改为添加它。

此致..