Fuerza de MySQL para volver duplicados de cláusula WHERE en sin usar JOIN / UNIÓN?
-
20-09-2019 - |
Pregunta
Esto podría no ser muy sensible, pero I'ld gustaría dejar que me MySQL devolver las filas duplicadas exactas si hay criterios duplicados en la cláusula WHERE IN
. ¿Es esto posible?
Tome este ejemplo:
SELECT
columns
FROM
table
WHERE
id IN( 1, 2, 3, 4, 5, 1, 2, 5, 5)
I'ld como MySQL me devuelve filas con id 5 tres veces, id de 1 y 2 dos veces, y 3 y 4 una vez.
A medida que la longitud de los argumentos IN
, así como el recuento duplicado (una vez, dos veces, tres veces, etc.), serán arbitraria no quiero depender de UNION
o JOIN
. Es algo como esto sea posible de otro modo?
Solución
No estoy seguro de por qué quiere prohibir unidas en su justa esencial para SQL. Es como la prohibición de llamadas a funciones en un lenguaje funcional.
Una buena manera de resolver esto es crear un conjunto de resultados que contiene los identificadores que desea regresar y unirse con ella. He aquí una manera de hacerlo:
SELECT Table1.*
FROM Table1
JOIN (SELECT 1 AS id
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 5
UNION ALL SELECT 5) AS T1
ON Table1.id = T1.id
No estoy seguro de si ha considerado este método? No tiene ninguno de los problemas que usted parece que temer.
Si usted prohíbe une no se puede hacer esto a menos que utilice un procedimiento almacenado, lo que yo diría que es peor que la unión.