要求:必须从2个或更多表中选择值,在查询中,条件应从excel记录中获取值(大约5 k)。
查询:
select
distinct
tableA.x
,tableB.phone_nbr,
tableC.tmp_oper_div_cd
from Table A join Table B on A.id= B.iD
left join table C on A.fc = C.fc
left join table h on fc.qr = h.qr
--h.hldx_cd=s.htl_cd
where tableB.phone_nbr like any
('%35051111%' ,'%35051155%','%35051113%','%35051190%')
and h.hldx_cd='TYOHC'
在上面的查询中,(请忽略连接缺陷等) hldx_cd和Phone_nbr值来自excel,phone_nbr值没有正确的格式。在excel中,我们为每个酒店代码提供大约5 k hldx_cd和多个电话号码。
请让我知道实现这一目标的逻辑。提前谢谢。
答案 0 :(得分:1)
创建临时表以保存您的电话号码:
CREATE MULTISET VOLATILE TABLE phones (pn VARCHAR(20), hldx_cd VARCHAR(20)) ON COMMIT PRESERVE ROWS;
在excel中为每个电话号码制作一个INSERT语句:
="INSERT INTO phones VALUES ('" & A1 & "', '" & B1 & "');"
假设您的电话号码列表在A栏中,并且它的酒店代码在此处为B列,请将该内容复制下来以生成5000个插入语句。然后将它们复制到您的SQL客户端并运行它们。这需要一段时间,你的DBA会恨你。为了使DBA不受影响,请考虑制作常规表并使用fastload,mload,tpt或bteq导入数据。显然有一点学习曲线(虽然Teradata Studios会让它变得简单)并假设您至少在服务器上的数据库中具有CREATE TABLE的安全性。
现在您可以加入以获得比赛:
SELECT DISTINCT tableA.x
,tableB.phone_nbr
,tableC.tmp_oper_div_cd
FROM TABLE A
JOIN TABLE B ON A.id = B.iD
LEFT JOIN TABLE C ON A.fc = C.fc
LEFT JOIN TABLE h ON fc.qr = h.qr
INNER JOIN phones ON tableB.phone_nbr = phones.pn AND h.hldx_cd = phones.hldx_cd;
你在这里真的没有很多其他好的选择,因为你的比较数据很大并且在excel中停滞不前,就Teradata而言,它对你没有任何好处。