我有两个表,我需要将它们组合成一个查询(坏软件),来自具有不同模式的表。我可以轻松地伪造一个表来处理模式差异,但更重要的是,我只想要第二个表中基于(连接)第一个表中的信息的行子集。我最后的手段是制作一个存储过程和临时表,但我想知道是否可以通过查询来做到这一点。这是在 MySQL 5.5 中
说我有类似的东西:
Cats BadCats
---- -------
id cat_id
name color
weight badness
length
color
awesomeness
我想为蓝色结果集中的猫选择所有蓝色猫和坏猫值。喜欢:
SELECT id,name,awesomeness from Cats where color = 'blue'
UNION
SELECT cat_id,null,badness from BadCats
where BadCats.cat_id = Cats.id
and BadCats.color = 'blue' -- or BadCats.color = Cats.color
我想做的另一个人为的例子是:
SELECT id,name from Cats c JOIN BadCats bc on bc.cat_id=c.id
但是以某种方式伪造 BadCat 的列,因此连接可以工作。我的存储过程看起来像:
CREATE TABLE temp
SELECT id,name,awesomeness from Cats where color = 'blue' INTO temp
SELECT cat_id,null,badness from BadCats where cat_id in (select distinct id from Cats) INTO temp
return * from temp
或者可能:
CREATE TABLE temp
SELECT cat_id,null,badness from BadCats INTO temp -- same schema
SELECT id,name,awesomeness from Cats LEFT JOIN BadCats on id=cat_id
where Cats.color = 'blue'
或者更有可能的是,与 Cats 具有相同架构的 BadCats 的视图......
这里的最终目标是通过在 BadCats 中包含与找到的 Cats 匹配的行来获取蓝猫的列表,并了解它们有多棒/坏,因此软件可以根据 id 处理这些行。