我的表中有很多行,我准备 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 =某个ID):
RESULT |ID
1 |x
1 |x
2 |x
2 |x
3 |x
最佳答案
使用函数 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
查看简化版 demo .
我无法判断它的效率,但它肯定更简单。
关于MySQL - 对 SELECT 结果进行 UNION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58613377/