0

configとconfig_exceptionsという名前の2つのテーブルがあります。どちらも同じ構造です。列はhome、configName、data、activeです。

構成テーブルには以下のデータがあります

0 config1 my_data1 active
0 config1 my_data2 active
0 config1 my_data3 active
0 config2 my_data3 active
2 config1 my_data1 active
2 config2 my_data1 active

config_exceptionsテーブルには以下のデータがあります

10 config1 my_data1 active

以下のような結果を得るには、ホーム0のみでconfig_exceptionsデータを免除するクエリを作成する必要があります

0 config1 my_data1 active
0 config1 my_data2 active
0 config1 my_data3 active
0 config2 my_data3 active
2 config1 my_data1 active
2 config2 my_data1 active
10 config1 my_data2 active
10 config1 my_data3 active

この結果は、ホーム0を使用してホーム10の構成結果の新しいセットを作成し、config_exceptionsテーブルデータを除外します。比較するための主な列は、homeとconfigNameです。

また、10としてハードコーディングすることはできませんが、0はベースとして使用されるため、ハードコーディングすることができます。

このクエリを書くのを手伝ってください、私にはわかりません。アイデアを教えてください。

4

2 に答える 2

2

さて、あなたのサンプルでは、​​これは機能します。

SELECT home, configName, data, active
FROM config

UNION

SELECT ce.home, c.configName, c.data, c.active
FROM config_exceptions ce
INNER JOIN config c ON c.configName = ce.configName
WHERE ce.data <> c.data
AND c.home = 0

SqlFiddle

于 2012-09-27T15:18:17.240 に答える
0

私はこのようなことを考えます:

select *
from ((select home, configName, data, active
       from config
      ) union all
      (select 10 as home, configName, data, active
       from config c left outer join
            config_exceptions ce
            on c.home = ce.home and
               c.configName= ce.configName and
               c.active = ce.active
       where config = 0 and
             ce.home is null
      )
     )
order by 1, 2, 3, 4
于 2012-09-27T15:17:59.487 に答える