我有两个名为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可以硬编码,因为它被用作基础。
请帮我写这个查询,我不知道。请给我一些想法。
答案 0 :(得分: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
答案 1 :(得分: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