我有一个订购系统,可以有多个与一个订单相关的收据。我最近遇到了如下问题,产生了不良结果。
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(),
)
答案 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)