【问题标题】:Return two identical rows in MySQL在 MySQL 中返回两个相同的行
【发布时间】:2013-09-09 18:06:20
【问题描述】:

我有一个订购系统,可以有多个与一个订单相关的收据。我最近遇到了如下查询,结果不理想。

SELECT info FROM orders WHERE id IN (1, 2, 2) ORDER BY FIELD (id, 1, 2, 2);

有没有办法将订单 #2 的行返回两次?截至目前,查询按预期返回第一行然后第二行;但是,在这个特定的实例中,需要将第 2 行返回两次。

表格大致如下(我知道它不是完全有效的MySQL,只是为了说明):

CREATE TABLE orders (
    id int(),
    info VARCHAR(),
)

CREATE TABLE links (
    orderid int(),
    receiptid int()
)

CREATE TABLE receipts (
    id int(),
    otherinfo VARCHAR(),
)

【问题讨论】:

    标签: mysql


    【解决方案1】:

    如果我对情况的理解正确,您的订单表中有两个条目 但是 orderId 2 在链接表中列出了两次。如果这是正确的,那么你想要的是:

    select o.info from orders o
    inner join links l on o.id = l.orderid
    

    【讨论】:

    • 是的,正是我想要的。谢谢
    【解决方案2】:

    如果您需要返回该行两次,那么在where 子句中进行过滤不是您想要的。您可以通过使用join 进行过滤来做到这一点:

    SELECT o.info
    FROM orders o join
         (select 1 as id union all select 2 union all select 2
         ) ids
         on o.id = ids.id
    ORDER BY FIELD (o.id, 1, 2, 2);
    

    【讨论】:

      【解决方案3】:

      好吧,你可以使用UNION ALL

      类似

      SELECT info FROM orders WHERE id IN (1, 2)
      UNION ALL
      SELECT info FROM orders WHERE id IN (2)
      

      【讨论】:

        猜你喜欢
        • 2016-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-01
        • 2013-05-18
        相关资源
        最近更新 更多