MySQL - UNION over SELECT результат - PullRequest
0 голосов
/ 29 октября 2019

В моей таблице много строк, я готовлю test_result_table:

SELECT * FROM 
(
  SELECT ID, DATA
  FROM table
  WHERE DATA = "A" OR DATA = "B" OR DATA = "C"
) AS test_result_table

Как я могу это сделать:

SELECT * FROM
    (
        SELECT 1 AS RESULT, ID 
        FROM test_result_table
        WHERE DATA = "A"
      UNION  
        SELECT 2 AS RESULT, ID 
        FROM test_result_table
        WHERE DATA = "B"
      UNION
        SELECT 3 AS RESULT, ID 
        FROM test_result_table
        WHERE DATA = "C"
    ) AS result_id
ORDER BY RESULT

Я знаю, что делать с временной таблицей, лучше(быстрее) решение?

Я ожидаю (x = некоторый идентификатор):

RESULT |ID
1      |x
1      |x 
2      |x
2      |x
3      |x

1 Ответ

1 голос
/ 29 октября 2019

Вы можете получить те же результаты, используя функцию FIND_IN_SET(), которая будет возвращать значение столбца RESULT:

SELECT t.*
FROM (
  SELECT 
    FIND_IN_SET(DATA, 'A,B,C') AS RESULT, 
    ID
  FROM tablename
) t
WHERE t.RESULT > 0
ORDER BY t.RESULT

См. Упрощенную демонстрацию . Я не могу сказать о его эффективности, но он, конечно, проще.

...