1

期待どおりに別々に機能する2つのクエリがあります。ユニオンを使用して一度に両方のクエリの結果を取得した場合、2 番目のクエリからの行はフェッチされません。私のクエリは次のように単純化されています。

( select 
    tmp.inv_id AS inv_id,
    tmp.name AS inv_name,
    tmp.level AS inv_level,
    'archive' AS alarm_tpye,
    log.start_time AS start_time,
    log.end_time AS end_time 
  FROM tmp_raw_inventory AS tmp
  INNER JOIN log_alarm_archive AS log ON  tmp.inv_id=log.inv_id
  WHERE 
    log.start_time between STR_TO_DATE($date1,'%Y-%m-%d') and STR_TO_DATE($date2,'%Y-%m-%d')  OR
    log.end_time between STR_TO_DATE($date1,'%Y-%m-%d') and STR_TO_DATE($date2,'%Y-%m-%d')
) 

UNION

( select 
    tmp.inv_id AS inv_id,
    tmp.name AS inv_name,
    tmp.level AS inv_level,
    'active' AS alarm_tpye,
    log.alarm_time AS start_time,
    STR_TO_DATE($date1,'%Y-%m-%d') AS end_time 
  FROM tmp_raw_inventory AS tmp
  INNER JOIN log_alarm AS log ON  tmp.inv_id=log.inv_id
  WHERE 
    log.alarm_time between STR_TO_DATE($date1,'%Y-%m-%d') and STR_TO_DATE($date2,'%Y-%m-%d')
) 

$date1 と $date2 は、正しい形式で渡される文字列の日付パラメーターです。最初のクエリの結果は来ていますが、2 番目のクエリの結果は来ていません。行は一意ではないため、使用しUNIONました。この失敗の後、私はテストしましUNION ALLたが、結果は変わりませんでした。

あなたの助けは高く評価されます。

更新: 最初の部分の結果は次のとおりです。

inv_id, inv_name        , inv_level, alarm_type, start_time           , end_time
234231, 'inventory name', 'high'   , 'archive' , '2013-02-10 05:38:03', '2013-02-12 09:36:26'
234231, 'inventory name', 'high'   , 'archive' , '2013-02-10 16:10:18', '2013-02-10 17:03:13'
234231, 'inventory name', 'high'   , 'archive' , '2013-02-10 20:08:12', '2013-02-10 21:17:37'

第2部の結果は以下の通りです。

inv_id, inv_name        , inv_level, alarm_type, start_time           , end_time
234231, 'inventory name', 'high'   , 'active' , '2013-02-10 23:27:03', '2013-02-11 00:00:00'

クエリ全体の結果は、最初の部分と同じです。

4

0 に答える 0