【发布时间】:2019-08-05 08:09:39
【问题描述】:
我有 4 张桌子:
- Table_op_type
- Table_maintenancetype
- Table_repair_time
- Table_repair_type
每个表都有一个可以为真或假的列,我有一个 Table_maintenancereport,当我选择 Table_maintenancereport 和每个表中的一行时,我有一个 Table_maintenancereport 中的许多列和 4 列外键从 4 上表给出是真正的代码工作正常,但是当从表中返回多行时会出现此错误。
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
我该如何解决?
我的代码是:
SELECT *
FROM Table_maintenancereport
WHERE mtypeid IN (IIF(@smtype = 1, (SELECT Table_maintenancetype.id FROM Table_maintenancetype WHERE enable_search = 1), mtypeid))
AND op_typeid IN (IIF(@sop IN (1), (SELECT Table_op_type.id FROM Table_op_type WHERE enable_search = 1), op_typeid))
AND repaire_timeid IN (IIF(@stime IN (1), (SELECT Table_repair_time.id FROM Table_repair_time WHERE enable_search = 1), repaire_timeid))
AND repaire_typeid IN (IIF(@stype = 1, (SELECT Table_repair_type.id FROM Table_repair_type WHERE enable_search = 1), repaire_typeid));
【问题讨论】:
-
编写整个代码示例,仅此输入并不清楚。
-
mtypeid IN ( iif(@smtype=1,(select Table_maintenancetype.id from Table_maintenancetype where enable_search=1),mtypeid))这个东西完全没有意义,你来这里的目的是什么? -
问题不在于
IIF,而是您的子查询;该错误准确地告诉您问题所在。然而,这似乎你会更好地使用一些正确的JOIN语法和正确的布尔逻辑。 -
您的每个子查询都返回多个值,即其他 3 个表返回多个值,请尝试使用
distinct。改用 case 表达式重写语句
标签: sql sql-server sql-server-2017