【问题标题】:How will I achieve the below requirement with sql query如何使用 sql 查询实现以下要求
【发布时间】:2019-05-19 08:05:33
【问题描述】:

我有以下表格

表1

table1_id        name      
1                abc          
2                cde            
3                efg           

表2

table2_id(fkey)     value
  1                 10
  2                 19
  3                 50

这里的表 2 外键引用表 1 的 id。当我查询6:10,8:19,5:50时,我想要以下字符串格式@

6,8 和 5 以上是我定义的常量(可以硬编码),其中 10、19,50 是我根据 table1 的名称列收到的值

i,e:获取字符串中键 6 的值:>

select table2.value by join 2 table on id where name="abc"

next : 获取键 8 的值是 by>

select table2.value join 2 table on id where name="cde" 

等等

【问题讨论】:

  • 请以更完整的方式格式化并重新表述您的问题。一切都混在一起,令人费解。
  • ....但是为什么 abc 是 6,cde 是 8?
  • 6 是硬编码的(我会在存储过程中提到它)相应的键应该来自 table1.id=table2.id 上的 table2.value 其中 table1.name="abc" 等等8 其中name="cde"
  • 键 6 将被硬编码在存储过程中,其对应的值应该来自 table2.id=table1.id 上的 table2.value 其中 table1.name="abc" 等等键 8。但是如果我的怀疑是有效的,如何在单选中处理多个 where 子句(对于 key 8 name="cde")

标签: sql sql-server stored-procedures


【解决方案1】:

你似乎想要这样的东西:

select stuff( (select concat(',', v.val, ':', t2.value)
               from table2 t2 join
                    table1 t1
                    on t2.table2_id = t1.table1_id join
                    (values ('abc', 6), ('cde',8 ), ('efg', 5)
                    ) v(name, val)
                    on v.name = t1.name
               for xml path ('')
              ), 1, 1, '')

没有for xml path 的子查询会生成您想要的对。 for xml path 仅用于字符串聚合。

【讨论】:

  • @ Gordon Linoff :它部分给出了结果。问题是它显示了它们之间具有共同 id 的所有结果。但是名称(即:“abc”,“cde”)也应该出现在 table1 中,因为它应该相应地显示
  • @krity 。 . . “当我查询 6:10,8:19,5:50 时,我想要以下字符串格式”。这就是该查询返回的内容。
  • @Gordon Linoff : 你没听懂我的意思,我的意思是假设两个表中都有一个table1_id 和table2_id 条目为5,并且对应的列“name”值为“xyz”在“我在查询中没有提到”的表 table_1 中,我仍然得到与输出字符串中的值相对应的值。
猜你喜欢
  • 1970-01-01
  • 2011-06-07
  • 2013-06-05
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
  • 2013-03-26
  • 2023-01-11
  • 2020-10-14
相关资源
最近更新 更多