【问题标题】:SQL join based on select as column name基于 select 作为列名的 SQL 连接
【发布时间】:2020-07-29 17:45:18
【问题描述】:

所以在一个表中我可以使用replacecharindex 来提取与另一个表中的 PK 相关的特定 ID,然后我想根据修剪后的值加入另一个表中的数据,如何我可以这样做吗?

select top 100 *, Replace(Left(LogValue,Charindex(';', LogValue) - 1) ,'RtaId=', '') as TaskID, PrmRoutingTask.*    
  from SytLog       
       inner join  PrmRoutingTask on RtaId = TaskID
 where LogTableName like '%Routing%' and LogValue like '%RtaAniId=397%' 
 order by 5 desc;

我遇到的问题是我创建的临时列名 (TaskID) 在内部联接中不起作用,实际上 TaskID 的结果引用了RoutingTask 表中的RtaId

【问题讨论】:

  • LogValue 来自哪个表?
  • 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你期望的内容和原因。
  • “不工作”没有帮助。我们可以预期,当确定时,这将是一个常见问题解答。请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。

标签: sql join select


【解决方案1】:

假设LogValue 属于第一个表,如果您生成子查询作为主查询的表表达式,则可以使用名为TaskID 的列。

例如,您可以通过执行以下操作在表表达式a 中生成列:

select top 100 
  a.*,
  PrmRoutingTask.*

from (
  select *,
    Replace(Left(LogValue,Charindex(';', LogValue) - 1) ,'RtaId=', '') as TaskID
  from SytLog
) a

inner join PrmRoutingTask on PrmRoutingTask.RtaId = a.TaskID

where LogTableName like '%Routing%' 
  and LogValue like '%RtaAniId=397%' 

order by 5 desc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    相关资源
    最近更新 更多