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)");

今、保留中のオンコール タイムシートを同じ 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)");

エラー I GET: クエリを実行できません: オペランドには 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 に答える