仅为ORDER BY选择列,而不是在结果中返回它们

时间:2016-10-09 04:29:28

标签: mysql

所以我有一个复杂的<table ng-table="vm.tableParams" class="table" show-filter="true"> <tr ng-repeat="user in $data"> <!-- L@@k here below! --> <td title="'Name'"> {{user.name}} </td> <td title="'Age'"> {{user.age}} </td> </tr> </table>** 查询,它根据从另一个表和给定变量中提取的信息将信息放入关系表中。

以下是查询:

INSERT

正则表达式是必需的,因为名称可能是INSERT INTO relational (class_id, teacher_id, student_id) VALUES ( (SELECT `id`, (`name` = "John Smith") as exact_score, (`name` RLIKE "[[:<:]]John Smith[[:>:]]") as reg_score, (MATCH (`name`) AGAINST ("John Smith")) as match_score FROM `teachers` WHERE (`title` RLIKE "[[:<:]]John Smith[[:>:]]" || MATCH (`title`) AGAINST ("John Smith")) ORDER BY CASE WHEN exact_score = 1 THEN exact_score END DESC, CASE WHEN reg_score > 1 THEN reg_score END DESC, CASE WHEN reg_score = 0 AND exact_score = 0 THEN match_score END DESC), 1, 1); Mr. John Smith,并且匹配是必需的,因为名称可能是John Smith PH.d当存储的名称实际上只是{{1}时}。

select查询会在90%的时间内生成我正在寻找的结果,但我需要的唯一真正的jon smith。我遇到的问题是INSERT的预期列数与查询返回的列数。

现在INSERT基本上是这样的:

John Smith

最后一个id由变量提供。

我的问题是,有没有办法为ORDER BY选择列,但是从结果中省略它们?

1 个答案:

答案 0 :(得分:2)

如果列在表/视图中定义,则可以在genfromtxt中使用它,并从结果中省略它。但在您的情况下,您在ORDER BY中使用计算列,因此如果您想省略这些列,则必须在ORDER BY中使用相应的公式替换它们,例如

ORDER BY

我认为这不是一个好的解决方案。相反,最好使用子查询:

ORDER BY
    CASE WHEN (`name` = "John Smith") = 1 THEN (`name` = "John Smith") END DESC
    -- etc...