制作具有相似属性和条件的别名

时间:2019-02-03 07:30:16

标签: sql postgresql

我正在查询,需要输出具有不同但相似条件的新别名。

有两个表;一个用于人,产品和销售。他们应该具有以下内容:

person = (personID, personName, isValidPerson)
product = (productID, productName)
sale = (productID, tradeTime, customerID, employeeID)

我的目标是在特定时间输出productID, productName, customerName, and employeeName。它也必须与众不同。

从上表中可以看到,我们没有名为customerNameemployeeName的属性。我知道我必须为这两个属性创建别名,但是由于某种原因我无法使它们工作并给我一个错误。

到目前为止,我试图通过将人员和销售表与两个条件相关联来使用AS语句。

为了对此进行详细说明,我做了以下事情:

SELECT DISTINCT s.productID, prod.productName,
                psn.personName AND psn.personID = s.customerID AS customerName,
                psn.personName AND psn.personID = s.employeeID AS employeeName,
FROM person psn, product prod, sale s
WHERE s.tradeTime < '2017-01-01 11:00:00';

但是,在给customerName和employeeName列分配别名时,我一直遇到错误。我尝试对psn.personID AS customerNameemployeeName并从WHERE声明。但是,我也有这个问题,因为customerNameemployeeName都存在识别选择哪个psn.personName的问题。

如果我能正确理解,我希望上述所有四个属性都应在“ 2017-01-01 11:00:00”之前的特定时间范围内显示其结果。

1 个答案:

答案 0 :(得分:0)

使用如下所示的连接

     Select pr.productID  pr.productname
     ,p.personName as customername,
     P1.personName as employeeName
    from sale s join product pr
  On s.productID=pr.productID
   Left Join person p on s.customerID=p.personID
  Left Join person p1 on s.employeeID=p1.personID

这里您需要两次与人员表进行连接,第一个用于customaername,第二个用于employeeName,这就是为什么我在连接时使用别名的原因