0

我有两个名为 config 和 config_exceptions 的表。两者具有相同的结构。列是 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

我需要编写一个查询以仅使用 home 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

此结果是使用 home 0 为 home 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 回答