我需要在一个垂直表中展平 2 行(然后加入第三个表),我通常通过为我需要的每个字段制作一个派生表来做到这一点。只有两个字段,我认为这并没有那么不合理。
但我知道我想要在派生表中返回的行是我与第三个表连接的子集。所以我试图找出最好的派生表,以便查询最有效地运行。
我认为派生表的 where 子句越严格,派生表越小,得到的响应就越好。
我真正想要的是将派生表的 where 子句与第三个表的连接相关联,但你不能在 sql 中这样做,这太糟糕了。但是我不是sql大师,也许有一些我不知道的技巧。
另一种选择是制作没有 where 子句的派生表,它最终会加入整个表两次(每个字段一次),当我对它们进行加入时,加入会过滤掉所有内容。
所以我真正要问的是什么是制作派生表的最佳方法,我非常清楚我想要什么行,但 sql 不会让我得到它们。
一个例子:
table1
------
id tag value
-- ----- -----
1 first john
1 last smith
2 first sally
2 last smithers
table2
------
id occupation
-- ----------
1 carpenter
2 homemaker
select table2.occupation, firsttable.first, lasttable.last from
table2, (select value as first from table1 where tag = 'first') firsttable,
(select value as last from table1 where tag = 'last') lasttable
where table2.id = firsttable.id and table2.id = lasttable.id
我想要做的是制作 firsttable where 子句 where tag='first' and id = table2.id