0

SELECT クエリがあります

SELECT bill.accountid, bill.price, bill.id, price.inclusive, price.exclusive
from bill inner join price on bill.id = price.id
where bill.price <> 
CASE bill.id WHEN 1 THEN price.Inclusive
CASE bill.id WHEN 2 THEN price.Inclusive
CASE bill.id WHEN 3 THEN price.exclusive

個別の関数なしでこのwhere句を達成するにはどうすればよいですか

ありがとう

4

3 に答える 3

1

これを使用しないのはなぜですか。さまざまな値の基準の間にあるWHERE句です。ORbill.id

SELECT bill.accountid, 
  bill.price, 
  bill.id, 
  price.inclusive, 
  price.exclusive
from bill 
inner join price 
  on bill.id = price.id
where 
(
  bill.id IN (1, 2)
  and bill.price <> price.Inclusive
)
OR
(
  bill.id = 3
  and bill.price <> price.exclusive
)
于 2012-11-01T11:59:22.263 に答える
0
SELECT
  b.accountid, 
  b.price, 
  b.id, 
  p.inclusive, 
  p.exclusive
FROM bill b
INNER JOIN price p ON b.id = p.id
WHERE b.price <> p.Inclusive
  AND b.id IN (1, 2, 3)
于 2012-11-01T11:58:47.647 に答える
0

bill.id はインデックス化されており、条件ステートメントで効果的にアクセスできると思います。

このクエリは、bill.id を使用して元の値を計算したため、bill.id インデックスを利用できません。

したがって、私の答えは、結果セットを小さく分割して直接比較することです。

(使用や状態も良回答です。)

SELECT bill.accountid, bill.price, bill.id, price.inclusive, price.exclusive
from bill inner join price on bill.id = price.id
where bill.id in (1, 2) and bill.price <> price.Inclusive
UNION ALL
SELECT bill.accountid, bill.price, bill.id, price.inclusive, price.exclusive
from bill inner join price on bill.id = price.id
where bill.id = 3 and bill.price <> price.exclusive;
于 2012-11-01T12:09:26.417 に答える