小编典典

连接两个表并使用where子句过滤它们

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最好的方式来只获取一个Web请求?我可以在C#代码ant中将结果重组到那里的类中。


阅读 210

收藏
2021-04-15

共1个答案

小编典典

就像提到的Code Code of Code一样,您应同时JOIN在表格中O.Status = 0使用WHERE子句应用表格,然后使用或基于升序或降序按ORDER BY要求的方式对结果进行排序,如下所示。最好使用它,因为它具有搜索,排序和操作列表的方法。ASC``DESC``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
2021-04-15