此任务应在带有1个查询的Access中完成。 有3个表格:
address {id, address, city, postalcode, country, supplierid}
supplier {supplierID, supplierName, nameid}
contactname {nameid, firstname, lastname, phone}
我需要创建查询,结果如下表所示:
{country, supplierNumber, supplierName, firstname, lastname, phone}
supplierNumber
是特定国家/地区的公司数量。
对于只有1个公司的国家(country, supplierName, firstname, lastname, phone
)必须填写;包含两个或两个以上公司的country, supplierNumber
字段。
所以我有个简单的主意:
SELECT COUNT() ...
FROM ... INNER JOIN ... ON ...
HAVING COUNT() ...
GROUP BY ...
UNION
...
但是我遇到了很多问题。 GROUP BY
要求SELECT
由于COUNT()
而需要的所有字段; UNION
在表中需要使用相等数量的字段,因此第二个表可能应该用NULL
字段或其他内容进行补充。因此,我不知道应该以哪种方式执行此任务。请帮帮我。
答案 0 :(得分:1)
假设address.supplierid
总是填充有效的supplierid
,而supplier.nameid
总是填充有效的nameid
,则可以使用{{1 }}如下查询。第一部分选择一个供应商所在的国家/地区和供应商/联系人,第二部分选择一个供应商以上的所有竞争(地址多个的国家):
UNION
答案 1 :(得分:0)
考虑通过汇总级别查询将您的单位级别表联接:
SELECT a.country, agg.supplierNumber, s.supplierName, c.firstname, c.lastname, c.phone
FROM ((supplier s
INNER JOIN contact c ON c.nameid = s.nameid)
INNER JOIN address a ON s.supplierid = a.supplierid)
LEFT JOIN
(SELECT sub_a.country, COUNT(*) AS supplierNumber
FROM address sub_a
INNER JOIN supplier sub_s ON sub_a.supplierid = sub_s.supplier_id
GROUP BY sub_a.country) AS agg
ON agg.country = a.country