【问题标题】:SELECT with varying WHERE clause带有不同 WHERE 子句的 SELECT
【发布时间】:2021-03-14 20:11:02
【问题描述】:

我有下表(C# 和 MS Access):

_sSqlString = "CREATE TABLE Device("
                                            + "deviceID AUTOINCREMENT NOT NULL,"
                                            + "brandName VARCHAR NOT NULL,"
                                            + "modelName VARCHAR NOT NULL,"
                                            + "deviceCaliber VARCHAR NOT NULL,"
                                            + "batterySize INT NOT NULL,"
                                            + "screenSize DOUBLE NOT NULL,"
                                            + "frontCameraMP INT NOT NULL,"
                                            + "rearCameraMP INT NOT NULL,"
                                            + "weightedScore INT,"
                                            + "PRIMARY KEY (deviceID)"
                                            + ")";

Table in MS Access with Populated Data

目标:

用户可以选择他们喜欢的品牌,这将执行一个 SELECT 命令来查找所有符合他们偏好的设备。用户还可以选择“任何品牌”,这是一个简单的 SELECT * 命令。

User Interface Screenshot 1

User Interface Screenshot 2

我尝试过的:

成功:一个 SELECT 过程,它通过了所有品牌,如果它们没有被选中,则设置为 NULL。

虽然这可行,但我觉得 OR 的重复效率低下,并且有改进的潜力。是否有可能改进这一点,或者 SELCT OR、OR、OR 等是最好的方法?

提前感谢您的帮助,非常感谢! :)

【问题讨论】:

  • "一个 SELECT 过程,它传入所有品牌,如果它们没有被选中,则设置为 NULL。"我不知道这是什么意思。为什么不在您的问题中包含实际代码?

标签: c# sql ms-access


【解决方案1】:

在这里使用 IN 合适吗?

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/in-transact-sql?view=sql-server-ver15

我不确定您是如何从 C# 转到 SQL,但如果您只是执行 SQL,您可以连接一串选定的品牌并在您的选择中使用它。点是你想要一个看起来像这样的选择

SELECT *
FROM Device AS d
WHERE d.brandName IN ('Apple', 'Alcatel')

【讨论】:

  • 您不应该通过连接用户输入来创建 SQL 语句,因为这会使您的代码容易受到 SQL 注入的攻击。请参阅 here 了解替代方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 2018-03-08
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
相关资源
最近更新 更多