加入两个表并使用where子句过滤它们

时间:2015-03-25 13:07:14

标签: mysql sql

我在获取所需的SQL输出时遇到问题。

我有两张这样的表:

tblOrder

ID    User    Status
1      1         0
2      1         0
3      2         1

tblOrderItem

ID   OrderID     Product    Quantity
1       1           A           2
2       1           B           1
3       2           A           3
4       2           B           1
5       2           C           1
6       3           A           2

我想获得一个输出表,我可以在其中查看状态为0的所有订单,并查看订单中的所有商品,如下所示:

输出

 OrderID      User    Product     Quantity
    1           1        A            2
    1           1        B            1
    2           1        A            3
    2           1        B            1
    2           1        C            1

我尝试使用不同版本的INNER JOIN等的所有SQL只获得每个OrderID(tblOrder.ID)的第一行。我应该如何编写SQL查询以获得我想要的结果?

接下来,我想用JSON格式的PHP打印输出,以便在另一台设备上运行C#程序以获得结果。最后,结果应该插入到类中:

Public class orderobject

{
    public int OrderID { get; set; }
    public int UserID { get; set; }
    public String Product[] { get; set; } // Dont know if correct way to make array this way
    public int Quantity[] { get; set; }
}

结果将最终插入到包含此类对象的列表中。因此,列表中的每个条目都是一个包含所有所需订单数据的单独订单。

我是否认为错误或者我希望我的SQL最好只获得一个网络请求?我可以在C#代码中重新组织结果,将其插入到那里的类中。

2 个答案:

答案 0 :(得分:0)

与代码编码器mentioned一样,您应JOIN使用O.Status = 0子句应用WHERE,然后使用ORDER BY对结果进行排序基于升序或降序使用ASCDESC所需的方式,如下所示。最好使用List<string>,因为它有搜索,排序和操作列表的方法。

SELECT OI.OrderID, O.User, OI.Product, OI.Quantity
FROM tblOrder O
INNER JOIN tblOrderItem OI ON O.ID = OI.OrderID
WHERE O.Status = 0
ORDER BY OI.OrderID ASC, OI.Product ASC

答案 1 :(得分:0)

我发现我做的主要问题是写O.ID = OI.ID而不是O.ID = OI.OrderID。这就是为什么我每个ID只有一行。 我应该看到,但我只想到其他问题。谢谢您的帮助!