2017-11-07 4 views
2

このコードはaとbを操作し、resultがcと等しいかどうかをチェックします。 「はい」の場合は、この行を印刷してください。私の質問は 行結果(A/B)= 0を表示するには、このコードを変更する方法であるmysqlクエリにゼロ値を表示するには?

SELECT id, a, b, operation, c 
FROM expressions 
where 
case 
    when operation LIKE '+' AND (a + b = c) then c 
    when operation LIKE '-' AND (a - b = c) then c 
    when operation like '/' AND (a/b = c) then c 
    when operation like '*' AND (a * b = c) then c 
ELSE FALSE END; 

出力:

id a b operation c 
1 2 3 + 5 
4 4 7 * 28 

11 0 1 / 0 
14 239 0 * 0 
15 18 18 - 0 

1、2行がOKと印刷されています。 3行、4行、5行は印刷されるべきですが、そうではありません! a/b = 0の場合、SQLクエリの2番目の条件はfalseです。 - 行は印刷されません。 0/1 = 0です。これは0で、印刷する必要があります。 1/0とは対照的に、印刷するべきではありません。 私のソリューションは、符号なし(a/b = c)を符号なしにキャストすることですが、機能しません。

答えて

1

としては、すでに問題が0がfalseとして扱われていることである、と指摘しました。

私はにロジックを簡素化するだろう:私はCASEは、コードをより理解ができないと思います

SELECT id, a, b, operation, c 
FROM expressions 
WHERE (operation LIKE '+' AND (a + b = c)) OR 
     (operation LIKE '-' AND (a - b = c)) OR 
     (operation LIKE '/' AND (a/b = c)) OR 
     (operation LIKE '*' AND (a * b = c)); 

あなたはゼロ除算を懸念している場合は、nullif()を使用します。

 (operation LIKE '/' AND (a/nullif(b, 0) = c)) OR 
+0

もう1つ考えてください: ...(操作LIKE '/' AND(a/b = c)AND b!= 0 AND c * b = a)または... – user3455638

+0

@ user3455638これらの条件は重要ではありません。なぜなら、MySQLはブール式の評価の順序を保証しないからです。 'NULLIF()は、ゼロ除算を避けるためのより良い方法です。 –

2

暗黙的な変換が行われるため、booleanintのような型を混在させないでください。

TRUE/FALSEの代わりに明示的な値を使用してください(0FALSEと扱われます)。代わり

SELECT id, a, b, operation, c 
FROM expressions 
where 
case 
    when operation LIKE '+' AND (a + b = c) then 1 
    when operation LIKE '-' AND (a - b = c) then 1 
    when operation like '/' AND (a/b = c) then 1 
    when operation like '*' AND (a * b = c) then 1 
ELSE 0 END = 1; 

SELECT id, a, b, operation, c 
FROM expressions 
where 
case 
    when operation LIKE '+' AND (a + b = c) then TRUE 
    when operation LIKE '-' AND (a - b = c) then TRUE 
    when operation like '/' AND (a/b = c) then TRUE 
    when operation like '*' AND (a * b = c) then TRUE 
ELSE FALSE END; 
+0

良いの行を印刷する上記の解決策の両方。最初はあなたが夢中になりました。クエリの最後に – user3455638

関連する問題