【问题标题】:How to get data from table using select query如何使用选择查询从表中获取数据
【发布时间】:2012-11-08 05:36:28
【问题描述】:

我不是要求简单的选择查询。我有一个包含多条记录的详细表。我想以某种方式获取特定 id 的记录。

我尝试过以下查询:

SELECT  `id` ,  `po_id` ,  `part_id` ,  `qty` ,  `price` ,  `status` ,  `lotid` 
FROM  `po_details` 
WHERE  `po_id` =3

它给了我以下结果:

现在我想要的是获取所有上述数据,但按 id 排序,然后按 partid 排序,所以结果会是这样的

id     partid
----   ------
11     27
15     27
12     43
16     43
13     102
14     15
17     24

谁能帮助我?我的查询需要进行哪些更改才能获得我想要的结果?

编辑

我已经尝试过这个查询,但它给了我相同的结果

SELECT  `id` ,  `po_id` ,  `part_id` ,  `qty` ,  `price` ,  `status` ,  `lotid` 
FROM  `po_details` 
WHERE  `po_id` =3 
ORDER BY `id` ,  `part_id`;

谢谢,

卡奇亚

【问题讨论】:

  • 您说您想先按 ID 订购,然后按 partID 订购,但您的预期结果却表明 (只有 13 个不合适)。你能澄清一下吗?
  • 删除最后一条评论。实际上,我知道应该如何确定您的排序顺序(假设这些输出是正确的)。您的前 6 个结果似乎按 partID 排序。最后两个可能是任何一个,但为什么 id 的 14 和 17 在您的结果中排在最后?
  • 我想要的是,选择给定 id 的所有部件 id,但以用户插入它的方式,如果任何部件 id 重复,那么它们就会聚集在一起。可能现在你更清楚了。
  • @pkacchia - 在这种情况下,您将需要一个额外的列来排序,无论是插入时间、自制增量数字还是标识列。

标签: mysql sql select sql-order-by


【解决方案1】:

正如 Lieven 所说,您需要一个额外的列进行排序。作为解决方法,您可以使用:

select p1.*
from po_details p1 join
(
    select min(id) order_id,  po_id ,  part_id 
    from po_details
    where po_id =3 
    group by part_id, po_id
) p2 on p1.part_id = p2.part_id and p1.po_id = p2.po_id
order by p2.order_id,p1.id 

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT  `id` ,  `po_id` ,  `part_id` ,  `qty` ,  `price` ,  `status` ,  `lotid` 
    FROM  `po_details` 
    WHERE  `po_id` =3 
    ORDER BY `id` ,  `part_id`;
    

    【讨论】:

    • 我已经尝试过了,但它给出的结果与我在问题中发布的结果相同。查看我的更新
    猜你喜欢
    • 2016-04-28
    • 2015-12-03
    • 2014-11-02
    • 1970-01-01
    • 2023-01-18
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多