FROM 语句和多个类似表 SQL 上的"matches"

  • 本文关键字:SQL 上的 matches 语句 FROM sql
  • 更新时间 :
  • 英文 :


有相当多类似的问题,但我似乎找不到我要找的东西。我正在构建一个数据集通过SQL查询在蟾蜍。最终,我将从4个不同的表拉到"匹配";把所有的数据放在一起。我知道"匹配"。不是SQL术语,但我的SQL知识和我想做的是有限的。我想要连接匹配的键(LDKEY=TICKETUID,这是有效的),然后从person表中匹配/连接PERSONID到OWNER(随后,获取人员的FIRST和LAST names),并最终重复这里没有的人员部门,因为我认为它将非常类似于names。

所以我有:

(SELECT  ld.CONTENTUID, ld.LDKEY, p.TICKETUID,  p.OWNER, p.OWNERGROUP, p.PLUSDETECTION,
ld.LDOWNERTABLE, LOWER(ld.LDTEXT), ld.LDOWNERCOL, p.DESCRIPTION, pe.PERSONID, pe.FIRSTNAME, pe.LASTNAME
FROM 
MAXIMO.LONGDESCRIPTION ld 
INNER JOIN MAXIMO.PLUSCA p ON LDKEY = TICKETUID, 
MAXIMO.PERSON pe 
INNER JOIN MAXIMO.PLUSCA ON (pe.PERSONID = MAXIMO.PLUSCA.OWNER)
WHERE (p.REPORTDATE > TO_DATE('06/01/2018 0:00:00', 'MM/DD/YYYY HH24:MI:SS')) AND 
(LDKEY != '804928982' AND LDKEY != '804928844') AND
AND (p.LEVEL = 'A' OR p.LEVEL = 'B' OR p.LEVEL = 'C')

FROM语句的第一部分单独工作:

FROM MAXIMO.LONGDESCRIPTION ld INNER JOIN MAXIMO.PLUSCA p ON LDKEY = TICKETUID

然而,当我要在PERSON表中添加时,事情发生了变化。我已经尝试了一些东西,比如:

MAXIMO.PERSON pe 
INNER JOIN MAXIMO.PLUSCA p ON (pe.PERSONID = p.OWNER)
Yields ambiguous column error on LEVELs further down. 

MAXIMO.PERSON pe 
INNER JOIN MAXIMO.PLUSCA p2 ON (pe.PERSONID = p2.OWNER)
Runs, but creates a MUCH larger dataset than expected and OWNER and PERSON do not seem to match
MAXIMO.PERSON pe 
INNER JOIN p ON (pe.PERSONID = p.OWNER)
Yields undefined

我在这里做错了什么?我怎样才能从"拉"出来呢?多个表吗?

谢谢

你已经知道,你所做的是错误的。

  • 您应该逐表编写FROM子句,在您执行的每一步后进行测试
  • 越简单越好;如果您连接为maximo,从查询中删除它,它没有帮助
  • 使用表别名
  • inner joinjoin一样好(至少在Oracle;您使用哪个数据库?TOAD代表"Oracle应用程序开发人员工具"。

您目前拥有的是(简化)

FROM longdescription ld
JOIN plusca p ON ldkey       = ticketuid ,person pe
JOIN plusca   ON pe.personid = plusca.owner

第二行显然是错误的。,person pe在这里做什么?不知道ldkeyticketuid属于哪个表(没有表别名,对吧?)。

第三行包含表plusca,就像第二行一样。这是"允许的",它被称为self join,但我不确定这是您真正想要的。

因此,从 开始
select *
from longdescription ld join plusca p on ld.key = p.ticketuid

如果正确,再添加一个表:PERSON:

select *
from longdescription ld join plusca p on ld.key = p.ticketuid
join person pe on pe.some_column = p.some_column (or maybe ld.some_column) --> ???

我不能为你写第三行,我不知道应该使用哪些列将person表连接到longdescription和/或plusca,但你应该知道。写完之后,运行查询,看看它是否返回正确的结果。然后继续,如果需要,添加其他表。

最后,where子句:在一切都正确连接之后,使用它来进一步限制结果数据集。像这样:

where p.reportdate > date '2018-06-01'            --> date literal; time component is set to 00:00:00 anyway
and ld.ldkey not in ('804928982', '804928844')  --> use IN; table alias?
and p.level in ('A', 'B', 'C')                  --> use IN

最新更新