早上好/下午好!我希望有人可以帮我解决一些可能非常简单的事情。
不可否认,我不是最强大的SQL查询设计师。也就是说,我花了几个小时的时间在我的键盘上敲击我的键盘试图让一个看似简单的三方联合工作。
注意:我正在查询Vertica数据库。
这是我的问题:
SELECT A.CaseOriginalProductNumber, A.CaseCreatedDate, A.CaseNumber, B.BU2_Key as BusinessUnit, C.product_number_desc as ModelNumber
FROM pps_sfdc.v_Case A
INNER JOIN reference_data.DIM_PRODUCT_LINE_HIERARCHY B
ON B.PL_Key = A.CaseOriginalProductLine
INNER JOIN reference_data.DIM_PRODUCT C
ON C.product_line_code = A.CaseOriginalProductLine
WHERE B.BU2_Key = 'XWT'
LIMIT 20
我有一个视图(v_Case),我正在尝试连接到另外两个表,所以我可以从每个表中查找一个值。上面的查询返回除最后一列之外的所有内容的相同数据(见下文)。它就像是在迭代最后一列来提取唯一条目,有点像“GROUP BY”子句。应该发生的是我获得了具有特定“BusinessUnit”和“ModelNumber”的唯一行,用于该记录。
DUMEPRINT 5/2/2014 8:56:27 AM 3002845327 JJT Product 1
DUMEPRINT 5/2/2014 8:56:27 AM 3002845327 JJT Product 2
DUMEPRINT 5/2/2014 8:56:27 AM 3002845327 JJT Product 3
DUMEPRINT 5/2/2014 8:56:27 AM 3002845327 JJT Product 4
我在这篇文章之后模拟了我的解决方案:
How to deal with multiple lookup tables for beginners of SQL?
我做错了什么?
感谢您提供任何帮助。
答案 0 :(得分:0)
数据问题。解决问题的一般规则是每个记录的不同(在这种情况下为C.product_number_desc作为ModelNumber)的列通常是问题所在的位置......以及为什么我指向dim_product。
如果您收到重复项,下面的此查询将有助于确定此表是否为您提供了问题。请记住,此语句中的键可以是多个字段......无论您加入表中的是什么:
Select key,count(1) from table group by key having count(1)>1
未来的其他选择...不要假设它是你的代码,像这样的重复几乎总是指向脏数据(其他选项是你导致交叉连接,因为键不正确)。如果您注释掉'c'表和select子句中引用的列,您将收到一行...因此您的欺骗来自此处的'c'表。
祝你好运