Hallo Bruno,
um doppelte Datensätze zu erzeugen musst deine Abfrage eine Art karthesisches Produkt erzeugen. Mit einem SUB-Select geht das nicht, sondern mit einem JOIN.
CREATE TABLE tab1 (
id INT NOT NULL
);
INSERT INTO tab1 VALUES
(1), (2), (3), (5), (8 );
/* SUB-Select klappt nicht */
SELECT id
FROM tab1
WHERE id IN(1,2,5,8,3,2,2,1)
ORDER BY id;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 5 |
| 8 |
+----+
5 rows in set (0.03 sec)
mysql>
/* 1. Lösung JOIN mit UNION ALL */
SELECT tab1.id
FROM tab1
JOIN ( SELECT 1 AS id
UNION ALL
SELECT 2 AS id
UNION ALL
SELECT 5 AS id
UNION ALL
SELECT 8 AS id
UNION ALL
SELECT 3 AS id
UNION ALL
SELECT 2 AS id
UNION ALL
SELECT 2 AS id
UNION ALL
SELECT 1 AS id
) tab2
ON tab1.id = tab2.id
ORDER BY tab1.id;
+----+
| id |
+----+
| 1 |
| 1 |
| 2 |
| 2 |
| 2 |
| 3 |
| 5 |
| 8 |
+----+
8 rows in set (0.00 sec)
mysql>
/* 2. Lösung Abfragemenge temporär speichern JOIN für größere Datenmenge */
CREATE TEMPORARY TABLE tab1_query (
id INT NOT NULL
);
INSERT INTO tab1_query VALUES
(1), (2), (3), (5), (8 ), (2), (2), (1);
SELECT tab1.id
FROM tab1
JOIN tab1_query tab2
ON tab1.id = tab2.id
ORDER BY tab1.id;
+----+
| id |
+----+
| 1 |
| 1 |
| 2 |
| 2 |
| 2 |
| 3 |
| 5 |
| 8 |
+----+
8 rows in set (0.00 sec)
mysql>
So sollte es stimmen..
Grüße
Thomas