【问题标题】:two slightly different queries into one - use a conditional var?两个稍微不同的查询合二为一 - 使用条件变量?
【发布时间】:2009-07-02 16:15:39
【问题描述】:

与其执行2个略有不同的sql语句得到总共10个结果,可以只用一个select来完成吗?

例如

选择 一个 , b , C 从 mytable 限制 3

选择 一个 , b , 左 (100, c ) 从 mytable 限制 3, 10

【问题讨论】:

    标签: mysql


    【解决方案1】:

    查看UNION 语法

    (SELECT a,b,c FROM mytable LIMIT 3)
    UNION
    (SELECT a,b,LEFT(100, c) FROM mytable LIMIT 3, 10);
    

    注意括号 - 它们确保最终的 LIMIT 子句适用于第二个查询,而不是整个结果集。

    除非您在结果中有一个数字键,可以让您使用 IF 来以不同方式格式化前 n 个结果,否则我认为您不会通过一次选择来执行此操作。

    【讨论】:

    • “单选” 我应该规定“单次访问数据库”。谢谢!
    【解决方案2】:

    您可以选择所有十行,然后根据您定义的条件语句使用 case 语句来控制返回的值。
    设置@line_total=0;

    选择
    一个,
    乙,
    @line_total := @line_total + 1,
    (@line_total 时的情况 然后c
    else left(100, c) end)
    从 test_query 限制 10;


    http://dev.mysql.com/doc/refman/5.0/en/case-statement.html

    【讨论】:

    • 希望这是要求澄清的正确位置,但是在您的示例中,我如何生成某种“计数器”来代替 [condition],以便我知道我在第 4 个查询中?
    • 我将其更改为包含运行总计。但是,我建议使用一个条件,该条件是您要用于替代语句的原因,而不是行号。使用集合时,期望数据在表中按特定顺序排列是不好的做法。
    猜你喜欢
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多