2012-03-26 13 views
0

「Y」READ_ACCESSを持つ任意の任意の子レコードが存在する場合に「Y」になるために読み取りアクセス権を選択親は私が私の 例を参照しなさい私のSQLクエリで問題が発生した

enter image description here

uが見るように、在庫レポートは、の株価アラートおよび株移動レポートの親です。

今質問があります。 'Y' read_accessを持つ子レコードがある場合、どのようにして親の読み込みアクセスを 'Y'にするかを選択できますか?一方、「Y」を持つ既存の子レコードがない場合、親のread_acessは「N」になります

私の悪い英語を申し訳ありません。

+0

この例では、レポートテーブルに複数の階層レベルが存在する可能性があります。報告書とその即時*の子どもが 'READ_ACCESS = 'N' 'を持ち、*孫の*のうちの1人が' 'Y' 'を持つ場合、' 'Y' 'が祖父母に伝播することを望みますか? –

+0

祖父母は「Y」になります – user998405

答えて

1

これは動作するはずです助けてください:

SELECT ISNULL(CHILDREN_TABLE.READ_ACCESS, PARENT_TABLE.READ_ACCESS) AS READ_ACCESS 
FROM TABLE AS PARENT_TABLE 
    LEFT JOIN TABLE AS CHILDREN_TABLE 
     ON CHILDREN_TABLE.Parent = PARENT_TABLE.Child 

それはあなたの重複を与える、あなたがSELECT DISTINCT ...

でこれを解決することができます( Inventory Reportための2行、 Stock Alert ReportStock Movement Reportに1つに1つ)にもかかわらず

OR、私は子供のテーブルでGROUP BYを追加すると、重複を解決すると信じて:

SELECT ISNULL(CHILDREN_TABLE.READ_ACCESS, PARENT_TABLE.READ_ACCESS) AS READ_ACCESS 
FROM TABLE AS PARENT_TABLE 
    LEFT JOIN (SELECT Parent, READ_ACCESS FROM TABLE GROUP BY Parent) AS CHILDREN_TABLE 
     ON CHILDREN_TABLE.Parent = PARENT_TABLE.Child 

Yであり、もう1つがREAD_ACCESSNである子がある場合、今でも複製は得られます。しかし、これはあなたのビジネスルールと議論する必要があるように思えます。

関連する問題