次のクエリがあります
SELECT P.PRICE, P.PRODUCT_ID FROM PRODUCT P WHERE P.PRODUCT_ID IN (41,41)
アプリケーション コードの制限により、製品レコードを 2 回返す必要があります。
私は SQL にあまり詳しくないので、本当に行き詰まっています。製品ごとに単一のクエリを実行したくありません。
2回表示するには、次のようにします。
SELECT P.PRICE, P.PRODUCT_ID FROM PRODUCT P WHERE P.PRODUCT_ID IN (41)
UNION ALL
SELECT P.PRICE, P.PRODUCT_ID FROM PRODUCT P WHERE P.PRODUCT_ID IN (41)
演算子が行うことは、UNION
本質的にあるクエリの結果を別のクエリの結果に「追加」することです...したがって、あなたの場合、同じ正確な選択を「追加」して、最終結果ですべての行が2回複製されるようにします。
ただし、より複雑なクエリに対しておそらくやりたいことは、次を使用することCROSS JOIN
です。
SELECT P.PRICE, P.PRODUCT_ID
FROM PRODUCT P
INNER JOIN ...
INNER JOIN ...
CROSS JOIN
(
SELECT NULL UNION ALL
SELECT NULL
) cj
WHERE P.PRODUCT_ID IN (41) AND ... AND ... AND ..
このように、行は副選択内の 's の数だけ複製され、メイン クエリのSELECT NULL
and条件は 1 回だけ実行する必要があります。CROSS JOIN
JOIN
WHERE
を使用CROSS JOIN
する利点は、結合条件を評価する必要がないことです。2 つのデータ セット間のデカルト積を作成するだけです。
CROSS JOIN
すべての主要な操作の最後に を追加するだけでJOIN
、データを手動で複製できます。
これを試して::
SELECT P.PRICE, P.PRODUCT_ID FROM PRODUCT P WHERE P.PRODUCT_ID=41
UNION ALL
SELECT P.PRICE, P.PRODUCT_ID FROM PRODUCT P WHERE P.PRODUCT_ID=41
別の方法 (UNION ALL
内部レベルで使用)。複雑なクエリと組み合わせるのが簡単です(コメントで述べたように):
SELECT p.price, p.product_id
FROM
PRODUCT AS p
JOIN
( SELECT 41 AS product_id
UNION ALL
SELECT 41
) AS selection
ON p.product_id = selection.product_id ;