我在尝试加入3个表时运行以下查询:
select
a.project_id, a.acc_name, a.project_name, a.iot,a.acc_id, a.active,
b.app_fte, b.contact_person, c.cost_call_date
from
Account a, Application b, account_version c
where
a.acc_id in (Select acc_id from account where acc_name='GGG') and
EXTRACT(MONTH FROM c.cost_call_date) = 3;
表中的样本数据如下:
Account :
acc_id acc_name iot acc_contact project_id project_name ilc_code license_no active
2 GGG NA YYY 7777 HHH TTR 766 false
Application :
app_id app_name app_fte contact_person acc_id
1 sfsf 4 sdsdff 2
Account_version :
line_id acc_id version_no chargable_fte cost_call_date is_approved
9 2 7 4 2018-03-20
这里acc_id是Account表的主键和Application和Account_version表的外键。当我运行上面的查询时,我得到30行,我也尝试使用distinct关键字但仍然得到10行。请帮助我获得独特的行。
答案 0 :(得分:0)
尝试这样的事情
SELECT DISTINCT a.project_id, a.acc_name, a.project_name, a.iot,a.acc_id, a.active, b.app_fte, b.contact_person, c.cost_call_date
FROM Account a
INNER JOIN Application b
USING (acc_id)
INNER JOIN account_version c
USING (acc_id)
WHERE a.acc_name = 'GGG'
AND EXTRACT(MONTH FROM c.cost_call_date) = 3
有关为什么您的查询为您提供的行数多于预期的参考,请尝试运行此命令:
SELECT a.*, b.*
FROM generate_series(1, 10) a, generate_series(1, 10) b
通过从多个表中进行选择,您所做的是cross join。您实际应该做的是获取所需行的内部联接,以及如果需要从结果中仅获取不同行的DISTINCT。