4

1 つの注文に関連する複数の領収書を持つことができる注文システムがあります。私は最近、望ましくない結果をもたらす次のようなクエリに出くわしました。

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

注文 #2 の行を 2 回返す方法はありますか? 現在、クエリは期待どおりに行 1 を返し、次に行 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 テーブルには 2 つのエントリがありますが、orderId 2 はリンク テーブルに 2 回リストされています。それが正しければ、あなたが望むものは次のとおりです。

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

行を 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);
于 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 に答える