【问题标题】:Problem with sql request in selecting either single result or multiple resultssql请求在选择单个结果或多个结果时出现问题
【发布时间】:2019-08-20 12:31:11
【问题描述】:

大家好,

首先感谢您提供帮助。我的问题是:我正在尝试编写将执行以下操作的 sql 请求:

  1. 当用户输入某个终端代码时,sql 返回该终端的结果
  2. 当用户输入带有掩码 'CN' 的终端代码时,sql 请求将返回在该终端开头具有 'CN' 的所有终端

我知道生病可能需要在这里使用CASE

到目前为止,我得到了:

SELECT 
    sm.terminalid as terminalcode,
    sm.sums as Latest_sums
FROM sums1 sm
... CASE
    WHEN sm.terminalid = :p_terminal 
        THEN sm.sums = (
            SELECT  max(ss.sums) from sums ss WHERE  ss.terminalid = :p_terminal
        )
    WHEN sm.terminalid = :p_terminal AND :p_terminal LIKE 'CN%' 
        THEN sm.sums = (
            SELECT sm1.sums FROM sums1 sm1 WHERE sm1.terminalid = :p_terminal
       AND :p_terminal LIKE 'CN%'
        )
    ELSE 'Incorrect Terminal ID'
  END 

任何人都可以帮助我我哪里出错了,因为当输入CN 时选择不会返回多个结果。

另外,如果有人对此任务有更好的解决方案,请随时分享。

提前谢谢你。

【问题讨论】:

    标签: mysql sql plsql


    【解决方案1】:

    对我来说,您选择记录的逻辑应该表示为WHERE 子句中的条件,例如:

    (:p_terminal LIKE 'CN%' AND sm.terminalid like 'CN%')
    OR (:p_terminal NOT LIKE 'CN%' AND sm.terminalid = :p_terminal)
    

    当给定参数看起来以'CN' 开头时,这将选择terminalid'CN' 开头的所有记录。否则它会选择terminalid 等于参数的记录。

    查询:

    SELECT 
        sm.terminalid as terminalcode,
        sm.sums as Latest_sums
    FROM sums1 sm
    WHERE 
        (:p_terminal LIKE 'CN%' AND sm.terminalid like 'CN%')
        OR (:p_terminal NOT LIKE 'CN%' AND sm.terminalid = :p_terminal)
    

    【讨论】:

    • 有道理,今晚我会重写,看看我会得到什么谢谢
    • @YuriyTimoshenkov:您的查询工作正常吗?如果是,请单击绿色复选标志接受答案。否则,请让我知道出了什么问题。谢谢!
    • 对不起,我的朋友离开了两个星期的旅行,今天测试一下,让你知道结果
    • 我已经尝试过查询,是的,它确实选择了多个终端,但是现在当您输入特定终端时,它仍然会选择所有终端。
    • 不好玩,我认为问题出在第二个问题上。
    【解决方案2】:
    SELECT sm.terminalid as terminalcode, sm.sums as sums, 
    FROM sums sm 
    WHERE sm.terminalid LIKE :p_terminal || '%'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 2022-01-12
      • 2021-03-30
      • 1970-01-01
      相关资源
      最近更新 更多