SELECT 来自两个表的 UNION 和 JOIN,列为 varchar 而不是 int
SELECT UNION and JOIN from two tables with column varchar instead int
在数据库“prodbase”中我有三个 tables:
Table 产品
|id | productname | productprice | productsupplierID (int11) |
+----+-------------+-----------------+----------------------------+
| 1 | Shirt | 20 | 3 |
| 2 | Tshirt | 25 | 5 |
Table 供应商
|supplierid (int11) | suppliername (varchar) |
+--------------------+------------------------+
| 3 | CompanyA |
| 5 | CompanyB |
Table 员工
|id | staffname | staffposition |
+----+-------------+-------------------+
| 1 | John | sales |
| 2 | Megan | accounting |
Table 产品使用来自 table 供应商的查找字段:supplierID。
我已经创建了一个数据库视图来合并 table 产品和员工。
使用以下查询。
SELECT 'prodbase'.'Products'.'productname' AS 'Product', 'prodbase'.'Products'.'productsupplierID' AS 'Supplier' FROM 'prodbase'.'Products'
UNION
SELECT 'prodbase'.'Staff'.'staffname' AS 'Staff', 'prodbase'.'Staff'.'staffposition' AS 'Position' FROM 'prodbase'.'Staff'
ORDER BY 'Supplier'
DESC LIMIT 5;
查询正常,但它在供应商列中显示编号 (ID)。
Product: Shirt
Staff: John
Position: sales
Supplier: 3
如何使用 JOIN 创建此 UNION 查询,以便它显示 Suppliername insted of supplierID?
所需输出示例:
Product: Shirt
Staff: John
Position: sales
Supplier: CompanyA
您需要解决一些问题才能按您希望的方式返回数据。首先,我认为您在这里不需要 UNION 。 UNION 用于将多个查询合并为一个查询。我认为您只需要对数据使用 INNER JOIN 即可获得所需的输出。说到人际关系,你错过了一个重要的人际关系。员工、产品和供应商之间没有关系,因此除非你加入关系table,否则无法提供你想要的输出。我创建了一个名为 Sale 的可想象关系示例 table,它将员工与销售的产品联系起来。这不是一个完美的示例,但它可以让您实际使用数据。通过关系 table,您可以通过 INNER JOIN 获取员工销售的所有产品,在这个简单的示例中。
CREATE TABLE Products(id INT, productname VARCHAR(50), productprice int, productsupplierID int);
CREATE TABLE Supplier(supplierid INT, suppliername VARCHAR(50));
CREATE TABLE Staff(id INT, staffname VARCHAR(50),staffposition VARCHAR(50));
CREATE TABLE Sale(staffid INT, productId INT);
INSERT INTO Products VALUES(1,'Shirt',20,3),(2,'Tshirt',25,5);
INSERT INTO Supplier VALUES(3,'CompanyA'),(5,'CompanyB');
INSERT INTO Staff VALUES(1,'John','Sales'),(2,'Megan','Accounting');
INSERT INTO Sale VALUES(1,1);
SELECT
Products.productname AS Product,
Staff.staffname AS Staff,
Staff.staffposition AS Position,
Products.productprice AS Price,
Supplier.suppliername AS Supplier
FROM
Sale
INNER JOIN Products ON Products.id=Sale.productId
INNER JOIN Supplier ON Supplier.supplierid=Products.productsupplierID
INNER JOIN Staff ON Staff.id = Sale.staffid
Product | Staff | Position | Price | Supplier
:------ | :---- | :------- | ----: | :-------
Shirt | John | Sales | 20 | CompanyA
db<>fiddle here
已编辑 - 我根据评论删除了 Sale。我猜你可以交叉连接 staff,但是,如果 product/supplier 和 staff 之间没有关系,就没有合理的方法来放置数据。
SELECT
Products.productname AS Product,
Products.productprice AS Price,
Supplier.suppliername AS Supplier
FROM
Products
INNER JOIN Supplier ON Supplier.supplierid=Products.productsupplierID
在数据库“prodbase”中我有三个 tables:
Table 产品
|id | productname | productprice | productsupplierID (int11) |
+----+-------------+-----------------+----------------------------+
| 1 | Shirt | 20 | 3 |
| 2 | Tshirt | 25 | 5 |
Table 供应商
|supplierid (int11) | suppliername (varchar) |
+--------------------+------------------------+
| 3 | CompanyA |
| 5 | CompanyB |
Table 员工
|id | staffname | staffposition |
+----+-------------+-------------------+
| 1 | John | sales |
| 2 | Megan | accounting |
Table 产品使用来自 table 供应商的查找字段:supplierID。
我已经创建了一个数据库视图来合并 table 产品和员工。 使用以下查询。
SELECT 'prodbase'.'Products'.'productname' AS 'Product', 'prodbase'.'Products'.'productsupplierID' AS 'Supplier' FROM 'prodbase'.'Products'
UNION
SELECT 'prodbase'.'Staff'.'staffname' AS 'Staff', 'prodbase'.'Staff'.'staffposition' AS 'Position' FROM 'prodbase'.'Staff'
ORDER BY 'Supplier'
DESC LIMIT 5;
查询正常,但它在供应商列中显示编号 (ID)。
Product: Shirt
Staff: John
Position: sales
Supplier: 3
如何使用 JOIN 创建此 UNION 查询,以便它显示 Suppliername insted of supplierID? 所需输出示例:
Product: Shirt
Staff: John
Position: sales
Supplier: CompanyA
您需要解决一些问题才能按您希望的方式返回数据。首先,我认为您在这里不需要 UNION 。 UNION 用于将多个查询合并为一个查询。我认为您只需要对数据使用 INNER JOIN 即可获得所需的输出。说到人际关系,你错过了一个重要的人际关系。员工、产品和供应商之间没有关系,因此除非你加入关系table,否则无法提供你想要的输出。我创建了一个名为 Sale 的可想象关系示例 table,它将员工与销售的产品联系起来。这不是一个完美的示例,但它可以让您实际使用数据。通过关系 table,您可以通过 INNER JOIN 获取员工销售的所有产品,在这个简单的示例中。
CREATE TABLE Products(id INT, productname VARCHAR(50), productprice int, productsupplierID int); CREATE TABLE Supplier(supplierid INT, suppliername VARCHAR(50)); CREATE TABLE Staff(id INT, staffname VARCHAR(50),staffposition VARCHAR(50)); CREATE TABLE Sale(staffid INT, productId INT); INSERT INTO Products VALUES(1,'Shirt',20,3),(2,'Tshirt',25,5); INSERT INTO Supplier VALUES(3,'CompanyA'),(5,'CompanyB'); INSERT INTO Staff VALUES(1,'John','Sales'),(2,'Megan','Accounting'); INSERT INTO Sale VALUES(1,1);
SELECT Products.productname AS Product, Staff.staffname AS Staff, Staff.staffposition AS Position, Products.productprice AS Price, Supplier.suppliername AS Supplier FROM Sale INNER JOIN Products ON Products.id=Sale.productId INNER JOIN Supplier ON Supplier.supplierid=Products.productsupplierID INNER JOIN Staff ON Staff.id = Sale.staffid
Product | Staff | Position | Price | Supplier :------ | :---- | :------- | ----: | :------- Shirt | John | Sales | 20 | CompanyA
db<>fiddle here
已编辑 - 我根据评论删除了 Sale。我猜你可以交叉连接 staff,但是,如果 product/supplier 和 staff 之间没有关系,就没有合理的方法来放置数据。
SELECT
Products.productname AS Product,
Products.productprice AS Price,
Supplier.suppliername AS Supplier
FROM
Products
INNER JOIN Supplier ON Supplier.supplierid=Products.productsupplierID