2016-09-19 5 views
0

との間の結合、私はそれはエラーメッセージが表示されない明らかだが、表示されたデータがない上私は、SQL構文で他のクエリとクエリの間で結合する他のSQL構文

SELECT * 
FROM tx_log 
WHERE (tx_command = 'prepaid-response' AND tx_status = 'OK') 
OR (tx_command = 'postpaid-response' AND tx_status = 'OK') 
OR (tx_command = 'cek-response' AND tx_status = 'NOK') 
    AND tx_timestamp between '2016-09-19 00:00:01' and '2016-09-20 00:00:01'; 

構文を使用してデータを表示したいです指定された日付と一致しません。上記では2016-09-19から2016-09-20までのデータを表示しますが、それ以外の日付は実際に表示されます。

ありがとうございます。

答えて

1

はあなたが外側ブラケット()を欠場この

SELECT * 
FROM tx_log 
WHERE ((tx_command = 'prepaid-response' AND tx_status = 'OK') 
OR (tx_command = 'postpaid-response' AND tx_status = 'OK') 
OR (tx_command = 'cek-response' AND tx_status = 'NOK')) 
AND tx_timestamp between '2016-09-19 00:00:01' and '2016-09-20 00:00:01'; 

を試してみてください。すべてのOR条件が終了したとき。

+0

ああ神よ、それは仕事だ、ありがとう。と良い簡単な説明:) –

+0

@ロファファストローマンあなたを助けるために私の喜び。神のお恵みがありますように。 – Manish

1
SELECT * 
FROM tx_log 
WHERE ((tx_command = 'prepaid-response' AND tx_status = 'OK') 
OR (tx_command = 'postpaid-response' AND tx_status = 'OK') 
OR (tx_command = 'cek-response' AND tx_status = 'NOK')) 
    AND tx_timestamp between '2016-09-19 00:00:01' and '2016-09-20 00:00:01'; 

OR戻りtrueによって接合条件のいずれかが、その行は関係なく、他の条件がtrue又はfalseを返すかどうかを結果に含まれません場合。私の質問に上記のようにすべての条件をORで1つの条件にまとめる。

+0

ええ、それは仕事です、ありがとう明確な説明:) –

+0

@RofiFathurrohmanあなたはようこそ。お力になれて、嬉しいです –

1

"AND" よりも優先されます "OR" はそうクエリが読み:

SELECT * 
FROM tx_log 
WHERE (tx_command = 'prepaid-response' AND tx_status = 'OK') 
OR (tx_command = 'postpaid-response' AND tx_status = 'OK') 
OR ((tx_command = 'cek-response' AND tx_status = 'NOK') 
     AND tx_timestamp between '2016-09-19 00:00:01' and '2016-09-20 00:00:01' 
    ) 

ので、タイムスタンプフィルタのみ

はこれを試して "最後" や条件に適用されます

SELECT * 
FROM tx_log 
WHERE (
     (tx_command = 'prepaid-response' AND tx_status = 'OK') 
    OR (tx_command = 'postpaid-response' AND tx_status = 'OK') 
    OR (tx_command = 'cek-response' AND tx_status = 'NOK') 
    ) 
    AND tx_timestamp between '2016-09-19 00:00:01' and '2016-09-20 00:00:01'