我有一个非常简单的问题,但我无法弄明白,因为我是SQL新手。这是我的数据在尝试从SQL脚本中提取时的显示方式。
SUPPLIERID PRODUCTID DESCRIPTION SUPPLIERID
- - - 1
- - - 4
- - - 3
- - - 2
2A 1 Metal Piece -
3A 2 Plastic Piece -
4A 3 Hinges -
5A 4 Hooks -
这是我的代码
select "PRODUCT1"."SUPPLIERID" as "SUPPLIERID",
"PRODUCT1"."PRODUCTID" as "PRODUCTID",
"PRODUCT1"."DESCRIPTION" as "DESCRIPTION",
"SUPPLIER"."SUPPLIERID" as "SUPPLIERID"
FROM "SUPPLIER"
FULL OUTER JOIN PRODUCT1
ON supplier.supplierid = product1.supplierid
如果我进行LEFT或RIGHT JOIN,我只能获得一列信息。如何将所有列填入4行?
答案 0 :(得分:0)
product1.supplierid
不与supplier.supplierid
匹配。
所以行之间没有真正的连接。所以你得到每个表的完整副本。
您尝试将 1,2,3,4 与 2A,3A,4A,5A 匹配(它们不匹配)< / p>
您要么加入错误的列(您可能希望supplier.supplierid
与product1.prdoductid
),要么您的表格没有正确关联..
答案 1 :(得分:0)
供应商ID不匹配。如果“1A”应该匹配“1”,那么你应该这样做(SQL Server):
select "PRODUCT1"."SUPPLIERID" as "SUPPLIERID",
"PRODUCT1"."PRODUCTID" as "PRODUCTID",
"PRODUCT1"."DESCRIPTION" as "DESCRIPTION",
"SUPPLIER"."SUPPLIERID" as "SUPPLIERID"
FROM "SUPPLIER" INNER JOIN PRODUCT1
ON supplier.supplierid + 'A' = product1.supplierid
但是你应该这样做,如果你知道“1A”应该匹配“1”。如果你不是,那么他们真的不应该匹配,这就是你使用FULL OUTER JOIN
获得结果的原因。