0

最初我的 sql 查询用于检查是否有待处理的时间表/加班准备好供经理审查......现在我添加了在不同表上的待命时间表......

我以前的 sql 查询有效但没有 $ONCALL_TABLE ...

list($qh, $num) = dbQuery("SELECT manager FROM $USER_TABLE WHERE username IN (SELECT DISTINCT uid FROM $TIMES_TABLE WHERE submitstatus=1 OR ot_status=1)");

现在我试图将挂起的 on-call 时间表添加到同一个 sql 查询中,但我不断收到错误......也许有人可以帮我修复我的语法?:

list($qh, $num) = dbQuery("SELECT manager FROM $USER_TABLE WHERE username IN (SELECT DISTINCT $TIMES_TABLE.uid, $ONCALL_TABLE.uid FROM $TIMES_TABLE, $ONCALL_TABLE WHERE $TIMES_TABLE.submitstatus=1 OR $TIMES_TABLE.ot_status=1 OR $ONCALL_TABLE.submitstatus=1)");

错误我得到:无法执行查询:操作数应包含 1 列

4

1 回答 1

2

问题出在子查询中,但我会使用union all

SELECT manager
FROM $USER_TABLE
WHERE username IN (SELECT uid
                   from (select $TIMES_TABLE.uid
                         from $TIMES_TABLE
                         where $TIMES_TABLE.submitstatus=1 OR $TIMES_TABLE.ot_status=1
                         union all
                         select $ONCALL_TABLE.uid
                         from $ONCALL_TABLE
                         where $ONCALL_TABLE.submitstatus=1
                        ) t
                   ) 

不过老实说,这union all可能会干扰索引的使用。这可能会表现得更好:

SELECT manager
FROM $USER_TABLE
WHERE username IN (select $TIMES_TABLE.uid
                   from $TIMES_TABLE
                   where $TIMES_TABLE.submitstatus=1 OR $TIMES_TABLE.ot_status=1
                  ) or
      username in (select $ONCALL_TABLE.uid
                   from $ONCALL_TABLE
                   where $ONCALL_TABLE.submitstatus=1
                  ) 
于 2013-04-03T01:11:44.580 回答