加入3个表pgsql

时间:2012-09-03 09:18:36

标签: sql postgresql join

我有3个表,如下所示

table 1
________________________________________________
id | effective_date     | table_3_id | acc_name |
___|____________________|____________|__________|
112|2012-02-01 12:00:00 |     23     | Over Pay |
___|____________________|____________|__________|

table 2
__________________________________
id    | table_1_id     | amount  |
______|________________|_________|
 1    |    112         |  400.00 |
______|________________|_________|

table 3
________________________________________
id  | emp_num  | first_name  | last_name|
____|__________|_____________|__________|
 23 |   100004 |   John      |    Doe   |  
____|__________|_____________|__________|

我有一个开始日期和结束日期,还有acc_name的预定义值。我想要做的是,从相关表中检索emp_num,first_name,last_name和amount,其中effective_date介于开始日期和结束日期之间,并且acc_name应该是预定义的值。

对于上表,如果我的开始日期= 2012-01-30 12:00:00,结束日期= 2012-03-01 12:00:00,acc_name = Over Pay;然后应返回以下值。

emp_num = 100004  
first_name = John  
last_name = Doe  
amount = 400.00

我该怎么做?我不确定是否加入所有3个表是最好的方法。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

是。使用联接。

select emp_num, first_name, last_name, amount
from 
    table1 
       inner join table2 on table1.id = table2.table_1_id
       inner join table3 on table1.table_3_id = table3.id
where
    effective_date between '2012-01-30 12:00:00' and '2012-03-01 12:00'
and 
    acc_name = 'Over Pay'

2月30日没有。

答案 1 :(得分:0)

在这里,试试这个:

SELECT  a.emp_num,
        a.first_name,
        a.last_name,
        c.amount
FROM    table3 a
            INNER JOIN table1 b
                on a.id = b.table_3_id
            INNER JOIN table2 c
                on b.id = c.id
WHERE   b.effective_date BETWEEN '2012-01-30 12:00:00' AND '2012-02-29 12:00:00' 
        AND
        b.acc_name = 'Over pay'