mysql中不同查询的多个表

时间:2013-04-03 00:36:29

标签: php mysql

最初我的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列

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
                  )