SQL请求选择单个结果或多个结果时出现问题

时间:2019-03-29 14:27:53

标签: mysql sql plsql

大家好,

首先感谢您尝试提供帮助。我的问题是关于:我正在尝试编写和执行以下命令的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时选择不会返回多个结果。

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

谢谢。

2 个答案:

答案 0 :(得分:0)

对我来说,您选择记录的逻辑应在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)

答案 1 :(得分:0)

SELECT sm.terminalid as terminalcode, sm.sums as sums, 
FROM sums sm 
WHERE sm.terminalid LIKE :p_terminal || '%'