在MySQL中返回两个相同的行

时间:2013-09-09 18:06:20

标签: mysql

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

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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);

答案 2 :(得分:0)

好吧,你可以使用UNION ALL

这样的东西
SELECT info FROM orders WHERE id IN (1, 2)
UNION ALL
SELECT info FROM orders WHERE id IN (2)