【问题标题】:SQL query that choose all values when no input没有输入时选择所有值的 SQL 查询
【发布时间】:2013-11-20 17:07:23
【问题描述】:

我已经在 access 2007 数据库中编写了这个查询:

SELECT Ordini.ID, Ordini.Data, Clienti.Cognome, Clienti.Nome, 
       DettagliOrdine.IDProdotto,
       Prodotti.Descrizione, Prodotti.Prezzo, DettagliOrdine.Quantità, 
       ([Prezzo]*[Quantità]) AS Totale, Ordini.Note, Produttori.Nome, Ordini.Ordinato, 
       Ordini.Arrivato, Ordini.Ritirato
FROM Produttori 
    INNER JOIN (Prodotti 
        INNER JOIN ((Clienti INNER JOIN Ordini ON Clienti.ID = Ordini.IDCliente) 
        INNER JOIN DettagliOrdine ON Ordini.ID = DettagliOrdine.IDOrdine) 
           ON Prodotti.ID = DettagliOrdine.IDProdotto) 
    ON Produttori.ID = Prodotti.IDFornitore
WHERE (((Clienti.Cognome)=[Cognome: ]) 
    AND ((Clienti.Nome)=[Nome: ]) 
    AND (([Cognome: ]) Is Not Null))
ORDER BY Ordini.Data;

此查询为 COGNOME 和 NOME 研究领域打开了一个输入框。

如果用户什么都不写(按 ENTER),我需要该字段研究标签是 .(该字段的所有值)。

es。如果用户编写了 COGNOME 而不是 NOME(在弹出 NOME 窗口时按 ENTER),则需要对所有带有“COGNOME”的 NOME 进行研究。

我该怎么做?

【问题讨论】:

    标签: sql ms-access ms-access-2007 windows-7-x64


    【解决方案1】:

    如果我正确理解了这个问题,我想你想要这样的东西......

    WHERE
        (
            Clienti.Cognome=[Cognome: ]
            OR [Cognome: ] Is Null
        )
        AND
        (
            Clienti.Nome=[Nome: ]
            OR [Nome: ] Is Null
        )
    

    当参数值为Null时,不根据对应字段进行过滤。但当参数值不为 Null 时,将用于过滤结果集,使其仅包含匹配值的行。

    【讨论】:

    • 用我建议的版本替换查询中的WHERE 子句。
    【解决方案2】:

    对于从 Access 本身执行的查询,您可以使用 Nz() 函数和 LIKE 运算符。例如,查询

    PARAMETERS [LastName: ] TEXT(255);
    SELECT ID, LastName, FirstName 
    FROM Clients 
    WHERE LastName LIKE Nz([LastName: ],"*")
    

    如果在LastName: 提示符处不输入任何内容,

    将返回所有记录*,但如果我在提示符处输入内容,则仅返回具有指定 [LastName] 的记录。

    *实际上,存在姓氏的所有记录(即,IS NOT NULL)。感谢 HansUp 的更正。

    【讨论】:

    • WHERE LastName LIKE "*" 排除 LastName 的 Null 行 ...这可能是 Domenico 真正想要的,但我认为他的意思是 all 行。
    • 我很抱歉,但不起作用..如果我在弹出窗口中写了一些东西,请不要选择正确的请求,请始终选择所有...我该怎么办?
    • @Domenico 我的答案中的简单示例对我有用。如果您使用您尝试使用的实际查询来编辑您的问题,也许有人可以确定您的查询为何表现不同。
    猜你喜欢
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    相关资源
    最近更新 更多