SQL查询,在没有输入时选择所有值

时间:2013-11-20 17:07:24

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

我在访问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键),那么在所有NOME上使用“COGNOME”进行研究。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

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

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

当参数值为Null时,不会根据相应的字段执行过滤。但是当参数值不是Null时,它将用于过滤结果集,使其仅包含具有匹配值的行。

答案 1 :(得分:2)

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

PARAMETERS [LastName: ] TEXT(255);
SELECT ID, LastName, FirstName 
FROM Clients 
WHERE LastName LIKE Nz([LastName: ],"*")
如果在LastName:提示符下输入任何内容,

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

* 实际上,所有记录的LastName都存在(即,IS NOT NULL)。感谢HansUp的纠正。