【问题标题】:Join repeats rows too many times加入重复行太多次
【发布时间】:2020-07-26 19:17:09
【问题描述】:

列出从事零售业或餐饮业的员工(姓名在同一列中)。包括他们工作的建筑和商店类型。

这就是我所拥有的。每当我运行它时,一切都会重复,所以现在有一百多行。有人可以帮帮我吗?

编辑

SELECT CONCAT(first_name, ' ',last_name) AS "Employee", shop_type AS "Shop Type", Building_Assigned AS "Building Name"
FROM employees
FULL OUTER JOIN Shops 
ON employees.first_name = Shops.shop_type 
FULL OUTER JOIN buildings
ON employees.last_name = buildings.Building_Assigned
WHERE Shops.shop_type is NOT NULL OR employees.first_name IS NOT NULL OR employees.last_name IS NOT NULL OR buildings.Building_Assigned IS NOT NULL

我已经为此尝试了各种连接以使其工作并给我想要的输出,但是每当我这样做时,例如,FULL OUTER Join 将 Shop Type 和 Building Name 返回为 NULL,Inner Join 和 Join 仅返回列的名称。其他所有内容都返回为 NULL。有没有人可以帮助我解决问题?

【问题讨论】:

  • 从不FROM 子句中使用逗号。 始终使用正确、明确、标准、可读的JOIN语法。
  • 关于avoiding old-style join syntax的更完整的解释

标签: sql sql-server ssms


【解决方案1】:

您必须使用JOIN 语法来获得所需的输出。

标准示例

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name
INNER JOIN table3
on table2.column_name2 = table3.column_name2;

尝试像上面那样加入你的表,你会得到输出。

【讨论】:

  • 我添加了内连接,但输出为空,因此我添加了左连接,但 Contractors 表全为 NULL。
【解决方案2】:

内连接必须用于连接数据的列。 例如:

SELECT 
    CONCAT(first_name, '  ', last_name) AS Employee,
    shop_type AS "Shop Type", Building_Assigned AS "Building Name"
FROM employees e
    Shops s on e.Location=s.ShopID
    buildings b on b.BuildingID=s.BuildingID

您必须能够连接表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多