最初我的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)");
现在我试图将待处理的待命时间表添加到同一个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列
答案 0 :(得分: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
)