让我们考虑一个虚构的例子

SELECT id, name, score.score FROM
        someTable,
        (select someTableId, count(*) as score FROM SecondTable GROUP BY someTableId) as score
    WHERE score.someTableId == id
    ORDER BY score.score DESC

现在假设我有一个计算得分的后端,我希望删除子查询并插入自己的数据。我想知道怎么做。
我想做这样的事情(这是个问题,因为下面的不起作用):
SELECT id, name, score.score FROM
        someTable,
        ((12,324), (1, 342)) as score(id, score)
    WHERE score.someTableId == id
    ORDER BY score.score DESC

下面是子查询的外部数据替换示例:
SELECT * FROM users WHERE id IN (SELECT user_id FROM posts WHERE thread_id = 12 GROUP BY user_id);

不带子查询和外部数据:
SELECT * FROM users WHERE id IN (1,2,3);

最佳答案

如果我理解正确:

SELECT id, name, score.score FROM
        someTable,
        (SELECT 12 as someTableId,324 as score UNION ALL SELECT 1, 342 <UNION ALL....>) as score(id, score)
WHERE score.someTableId == id
ORDER BY score.score DESC

这是唯一可以做到的方法,它实际上并不替换子查询,但它替换了表中的select,如果这正是您想要的,它可以提高性能。
在MySQL中,当您只想获取伪数据时,不需要像指定一个伪表那样指定一个from子句。

关于mysql - 从MySQL中的外部数据中选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36406815/

10-12 00:20
查看更多