2012-03-24 17 views
0

私は2つのクエリを持っています。mysqlクエリで非常に奇妙な動作

最初のものは..です

INSERT INTO balik 
    (balik_date, 
     balik_time, 
     balik_cardID, 
     balik_status, 
     balik_type) 
    select 
     current_date(), 
     '00:00:00', 
     L_CardID, 
     'BELUM BALIK', 
     L_Type 
     FROM 
     logdetail t1 
      LEFT JOIN balik t2 
       ON t1.L_CardID = t2.balik_cardID 
     WHERE 
      t1.L_Type = 'IN' 
     and t1.L_Date = current_date() 
     AND t2.balik_cardID IS NULL" 

ともう一つは..です

UPDATE balik blk 
    INNER JOIN logdetail ld 
     ON blk.balik_cardID = ld.L_CardID 
    and blk.balik_date = current_date() 
    SET 
     blk.balik_status = 'SUDAH BALIK', 
     blk.balik_type = 'OUT', 
     blk.balik_time = ld.L_Time 
    WHERE 
      ld.L_Type = 'OUT' 
     and ld.L_Date = current_date() 

私の問題は、私が実行したときに、私は内のすべてのレコードを削除しない限り、第一および第二のクエリ何も起こらないということですあらかじめ私のテーブル。その場合、両方のクエリが実行され、魅力的に動作します。

どうしてですか?

+0

私はすでに自分の投稿を更新しました! –

+2

あなたはユニークな列はありますか?それはなぜこれが一度しか機能しないのかを説明します。 –

+0

テーブルbalik(balik_date、balik_time、balik_cardID)は私のPKとテーブルlogdetail(L_Date、L_Time、L_CardID)は私のPKです...返信ありがとう.. –

答えて

0

私が覚えていることは、あなたが挿入しているものの影響を受けるかもしれないクエリの結果であるテーブルへの挿入を行うことができない...だから、選択が "ラップされた"内側のクエリが完全に最初に処理され、したがってインサートの影響を受けないように、別のレイヤーの内側に配置します。

INSERT INTO balik 
    (balik_date, 
     balik_time, 
     balik_cardID, 
     balik_status, 
     balik_type) 
    select 
     PreQuery.newDate, 
     PreQuery.newTime, 
     PreQuery.newCardID, 
     PreQuery.newStatus, 
     PreQuery.newType 
     from 
     (select 
       current_date() newDate, 
       '00:00:00'  newTime, 
       L_CardID  newCardID, 
       'BELUM BALIK' newStatus, 
       L_Type   newType 
       FROM 
       logdetail t1 
        LEFT JOIN balik t2 
         ON t1.L_CardID = t2.balik_cardID 
       WHERE 
        t1.L_Type = 'IN' 
       and t1.L_Date = current_date() 
       AND t2.balik_cardID IS NULL") PreQuery 

私はより密接にWHERE句

UPDATE balik blk, logdetail ld 
    SET 
     blk.balik_status = 'SUDAH BALIK', 
     blk.balik_type = 'OUT', 
     blk.balik_time = ld.L_Time 
    WHERE 
     blk.balik_cardID = ld.L_CardID 
    and blk.balik_date = current_date() 
    and ld.L_Type = 'OUT' 
    and ld.L_Date = current_date() 

で結合条件を適用し、その後、カンマ区切りのテーブルの一覧を表示...ドキュメントあたりのSQL構文のものと一致する更新時に構文を変更するであろううん、本質的には同じことだが、解釈の問題かもしれない。

+0

こんにちは@DRapp ...ありがとうございます...私はあなたに謝っています...うーん...クエリは正常に動作しています! :) –

+0

@ApizZest、あなたは歓迎です...今日まで、私はまだ学んでいます。 – DRapp