0

テーブルには、特権ユーザーと通常ユーザーの 2 種類の顧客がいます。顧客テーブルからいくつかの列の値を選択すると、通常のユーザーにはデフォルト値が必要ですが、特権ユーザーには実際の値が必要です。クエリ:

select name,id,budget,employees,duration from customers
where reg_date >= to_date( '01-SEP-2012','dd-mmm-yyyy') 
  and reg_date <= to_date('01-OCT-2012','dd-mmm-yyyy')

通常のユーザーの場合、予算、従業員、期間の列の値を 0 にする必要があります。

ユーザーが特権ユーザーかどうかを確認するには、「id」と「reg_mode」で別のテーブルを照会する必要があります。顧客の「タイプ」を含めるには、顧客テーブルに列を作成する必要があるとアドバイスされる場合があります。残念ながら、テーブルを変更する権限がありません。より少ないレイテンシーで値を取得するためのアイデアはありますか?

4

2 に答える 2

1

特にテーブル構造があまり明確ではないため、それを取得したかどうかはわかりません...他のテーブル名がuser_typeであるとしましょう。あなたが望むのは次のとおりだと思います(試していないため、クエリに小さなエラーが含まれている可能性があることに注意してください。構造のアイデアを提供したいだけです):

select name,id, '0' as budget, '0' as employees, '0' as duration from customers 
inner join user_type on
       customers.id = user_type.id
where reg_date >= to_date( '01-SEP-2012','dd-mmm-yyyy')  
  and reg_date <= to_date('01-OCT-2012','dd-mmm-yyyy') 
  and user_type.reg_mode = 'normal'

union

select name,id, budget, employees, as duration from customers 
inner join user_type on
       customers.id = user_type.id
where reg_date >= to_date( '01-SEP-2012','dd-mmm-yyyy')  
  and reg_date <= to_date('01-OCT-2012','dd-mmm-yyyy') 
  and user_type.reg_mode = 'privileged'

内部結合は where に似ています。その用語について質問がある場合はお知らせください...

于 2012-10-08T23:31:59.443 に答える
0

ここでは、次の 2 つのことを行う必要があります。

  1. 次の情報を持つ 2 番目のテーブルに参加しますreg_mode

    SELECT * FROM customers JOIN reg_data ON customers.ID = reg_data.ID

    たとえば、JOIN ここで詳細を参照してください

  2. 以下に応じて正しい値を選択しますreg_mode

    SELECT (CASE reg_mode WHEN "privileged" THEN customers.budget ELSE 0 END) 予算として ...

    SQL サーバーの詳細については、CASE こちらを参照してください。他のデータベースの場合、多かれ少なかれ同じである必要があります

于 2012-10-08T23:27:13.817 に答える