0

私は少し迷っています。これが私のクエリです:

SELECT id, title FROM products WHERE id IN (4,2,6,4,2);

クエリの結果は 3 つのレコードのみになります。

5 つのレコードすべてを取得するにはどうすればよいですか (この場合、重複を確認したいのです)。

どうもありがとう。

更新: 正確でなくて申し訳ありません。コメントありがとうございます。実際、「IN」が正しく理解できませんでした。

これは私のデータです:

---------------------
|  id |  title      |
---------------------
|  2  |  product_2  |
---------------------
|  4  |  product_4  |
---------------------
|  6  |  product_6  |
---------------------

IDのリストがあるので、私の意図は次のデータを受け取ることです:

---------------------
|  id |  title      |
---------------------
|  4  |  product_4  |
---------------------
|  2  |  product_2  |
---------------------
|  6  |  product_6  |
---------------------
|  4  |  product_4  |
---------------------
|  2  |  product_2  |
---------------------

だから私はIDのリストを持っていて、製品のタイトルを受け取りたい. 理想的には、順序も維持する必要があります。

4

2 に答える 2

2

という概念に問題があると思いますIn

この値を持つ単純なテーブルがあるとしましょう

id
--
1
2
3
4
5

もしあなたがそうするなら

select id from simplyTable where id in (2,3,4,2,3,4)

あなたが得る

id
2
3
4

これは、行を表示するかどうかを決定するためのINステートメントwhereがフィルターであるためです。繰り返し値を入れると、SQL はそれを無視します。なぜなら、最初の値を見つけて一致をチェックすると、その行が表示され、他の値に対してチェックを続けないためです。繰り返して配置すると、それ以上は表示されません。

いくつかの値を繰り返す必要がある場合、これを行う方法は UseUNION ALL

select id from simplyTable where id in (2,3,4)
union all
select id from simplyTable where id in (2,3,4)

これはあなたを返します:

id
2
3
4
2
3
4

UNION 個別に適用され、各値が 1 回だけ返されるという理由だけで 使用しないでください。UNIONクエリの結果を1つの結果に表示しているため、繰り返し値を表示できます。それがあなたが期待していることだと思います。

この場合、クエリは次のようになります。

SELECT id, title FROM products WHERE id IN (4,2,6);
UNION ALL
SELECT id, title FROM products WHERE id IN (4,2)
于 2012-09-01T22:02:01.917 に答える
1

一時テーブルと結合

SqlFiddle :

DROP   TABLE IF EXISTS num;
CREATE TABLE num (i INT);    
INSERT INTO  num (i) VALUES (4),(2),(6),(4),(2);

SELECT id, title
FROM   num, products
WHERE  id = i;

別の答えに触発されました。

于 2012-09-02T01:33:18.460 に答える