4

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

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(),
)
4

3 回答 3

4

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

select o.info from orders o
inner join links l on o.id = l.orderid
于 2013-09-09T18:29:12.143 回答
1

如果您需要两次返回该行,那么在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);
于 2013-09-09T18:09:28.637 回答
0

好吧,你可以使用UNION ALL

就像是

SELECT info FROM orders WHERE id IN (1, 2)
UNION ALL
SELECT info FROM orders WHERE id IN (2)
于 2013-09-09T18:08:59.417 回答