2014-02-13 57 views
2

我在努力弄清楚如何将便利数据列添加到连接表以用于评估。 对不起,如果术语不正确,我是一个SQL新手。将变量添加到连接表

对于此查询结构:

SELECT t1.id 
    FROM 
     table1 t1 
    INNER JOIN 
     table2 t2 ON t1.c2 = t2.c1 
    WHERE 
     t1.c5=5; 

...我想在正在使用的几个t1小号列的函数计算的连接表中添加一列。例如,t1.xt1.y,t1.zsum的变量名为score,然后可以在WHERE子句中引用该变量。

想要做到这一点的原因是它会被多次引用,并会减少冗长和帮助可读性。

我相信它会是这个样子:

SELECT t1.id 
    FROM 
     table1 t1 
    INNER JOIN 
     table2 t2 ON t1.c2 = t2.c1 
     -- function(t1.x, t1.y, t1.z) as score 
    WHERE 
     t1.c5=5; 
     --AND score ... 

使用PostgreSQL 9.3

+0

我想你想添加应该去选择条款,而不是内部连接的第一功能 – Leo

回答

1

如果scoret1列计算,则使用子查询上t1

SELECT t1.id 
FROM (select t1.*, function(t1.x, t1.y, t1.z) as score 
     from table1 t1 
    ) t1 INNER JOIN 
    table2 t2 
    ON t1.c2 = t2.c1 
WHERE t1.c5 = 5 AND 
     t1.score . . . 
2

一个很好的选择是使用having子句。

Select t1.id, SUM(t1.x + t1.y + t1.z) 
FROM table1 t1 inner join table2 t2 on t1.c2 = t2.c1 
WHERE t1.c5 = 5 
GROUP BY t1.id 
Having SUM(t1.x + t1.y + t1.z) = ... 

或者,你可以在from子句中做一个子查询。下面的代码对结构做了一些假设。

SELECT t1.id 
    FROM 
     (Select SUM(t1.x + t1.y + t1.z) as score, t1.c5, t1.c2, t1.id 
     FROM table1 t1 
     GROUP BY t1.id 
     ) t1 
    INNER JOIN table2 t2 on t1.c2 = t2.c1 

    WHERE 
     t1.c5=5 
     And t1.score = ... 
+0

我相信第一个查询会在Postgres中产生一个错误,因为它没有'group by'子句。 –

+0

你是对的会修改。 –