0
テーブルに追加された4つの新しい列の間で不正確なデータ入力をチェックするスクリプトを作成しています。これらの3つのチェックは比較的単純ですが、チェックする第4のフィールドはフラグの列(t/f)です。その値は2つの基準で決定されます。テーブル自体の開始日が今日の日付よりも短く、特定の値。このチェックを行うために、基本的に一意のIDを持つフラグ列を再作成したダミーテーブルを作成し、そのダミーテーブルをテーブルに追加して差異をチェックしてスキャンします。ダミーのテーブルを作成せずに直接チェックを行う方法があれば、私は尋ねています。私はいくつかのことを試しましたが、私のSQLスキルはひどく進歩していません。ダミーテーブルを最初に作成する必要がない場合の相違の確認
私が現在使用しているコードは以下の通りです:
CREATE TABLE check_is_billable
AS
SELECT csv.service_line_items.id AS service_line_items_id,
csv.media_plans.id AS media_plan_id,
cast(csv.service_line_items.start_date AS DATE) < CURRENT_DATE AND csv.media_plans.aasm_state = 'approved' AS is_billable_check
FROM csv.service_line_items
INNER JOIN csv.media_plans ON csv.service_line_items.media_plan_id = csv.media_plans.id
ORDER BY service_line_items_id;
SELECT
'Is Billable Check' AS test,
COUNT(*) AS error_count
FROM csv.check_is_billable
INNER JOIN csv.service_line_items ON (csv.service_line_items.id = csv.check_is_billable.service_line_items_id
AND csv.check_is_billable.media_plan_id = csv.service_line_items.media_plan_id
AND csv.check_is_billable.is_billable_check != cast(csv.service_line_items.is_billable AS BOOLEAN));
DROP TABLE check_is_billable;
基本的に、私が作成し、ダミーのテーブルを削除する必要がないように、私は真ん中のステップを変更することができる方法がある場合、私は疑問に思って。
あなたはどのようなRDBMSを使用していますか? (SQL Server、Oracle、DB2、MySQL、Postgresql other?)では、単純なサブクエリや共通のテーブル式を使用してこれを実現できます。 – xQbert
また、サンプルデータと望ましい結果を提供してください。 –
私はPostgreSQLを使用しています –