当前位置: 首页 > 面试题库 >

SQL连接和连接行

傅玮
2023-03-14
问题内容

我在两个表之间有多对多关系。

God_Restaurants包含我的餐厅。

God_RestaurantKat包含不同的类别。

God_RestKatReference包含两列,每列分别包含两个表的ID。

以下陈述是我能想到的,但没有给我我想要的输出。

DECLARE @Names VARCHAR(8000) 
SELECT DISTINCT R.RestaurantID as Restaurantid, 
                R.RestaurantName as Restaurantname, 
                K.RestaurantKatName as RestKatName 
FROM God_Restaurants R 
LEFT JOIN God_RestKatReference as GodR ON R.RestaurantId = Godr.RestaurantId 
LEFT JOIN God_RestaurantKat as K ON GodR.RestaurantKatId = K.RestaurantKatId 
WHERE R.RestaurantPostal = 7800

我希望输出是有关餐厅的信息,并在最后一列中是类别的连接行。


问题答案:

要串联值,可以使用for xml path('')。xml路径解决方案有误,应使用valuetype特殊字符。

declare @Temp table (id int, Name nvarchar(max))
declare @date datetime
declare @i int

insert into @Temp
select 1, 'asasd' union all
select 1, 'sdsdf' union all
select 2, 'asdad' union all
select 3, 'asd<a?>&sdasasd' union all
select 3, 'fdgdfg'

select @i = 1
while @i < 9
begin
    insert into @Temp
    select id, Name from @Temp

    select @i = @i + 1
end

select count(*) from @Temp

select @date = getdate()

select
    A.id,
    stuff((select ', ' + TT.Name from @Temp as TT where TT.id = A.id for xml path(''), type).value('.', 'nvarchar(max)'), 1, 2, '') as Names
from @Temp as A
group by A.id

select datediff(ms, @date, getdate())

select @date = getdate()

select distinct
    A.id,
    stuff((select ', ' + TT.Name from @Temp as TT where TT.id = A.id for xml path(''), type).value('.', 'nvarchar(max)'), 1, 2, '') as Names
from @Temp as A

select datediff(ms, @date, getdate())

您也可以使用变量解决方案

declare @temp nvarchar(max)

select @temp = isnull(@temp + ', ', '') + str
from (select '1' as str union select '2' as str union select '3' as str) as A

select @temp


 类似资料:
  • 我正在尝试识别应用程序中的SQL连接泄漏。经过一些操作后,当我的应用程序处于空闲状态(用户未执行任何活动)时,我在返回的结果集中看到7个与我的数据库的连接。所有连接的状态均为,所有连接的值均为。 我正在使用连接池,但连接字符串中未指定连接生存期。这意味着如果我是对的,将使用它的默认值0。连接生存期的值为零意味着SQL server永远不应该关闭连接,对吗? 我让我的应用程序空闲一段时间(15-20

  • 我正在尝试将spark连接到pyspark中的oracle数据库,但我遇到了驱动程序错误,请任何人帮我解决这个问题。我刚接触Spark,刚刚开始学习。下面是我的代码, 下面是错误, 文件“C:/Users/Macaulay/PycharmProjects/Spark/SparkSqlOracle.py”,第8行,在OrcDb=SqlContext中。阅读格式('jdbc')\文件“C:\Hadoo

  • SQL join 用于把来自两个或多个表的行结合起来。 SQL JOIN SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。 最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)。 SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。 演示数据库 在本教程中,我们将使用 RUNOOB 样本数据库。 下面是选自 "Webs

  • 我有一个简单的JPA实体(Hibernate实现),它有一个急切获取的关系: 使用者爪哇: 用户状态: 为查找实体而生成的查询如下所示: 我的问题是:为什么Hibernate执行这个外部连接而不是内部连接(因为我已经告诉它它不可为null或可选)。有没有办法强制内部连接? 谢谢

  • 问题内容: 我在重构的旧系统中有以下SQL语句。这是此问题的缩写视图,只是暂时返回count(*)。 它会生成大量记录并杀死系统,但是有人可以解释其语法吗?可以用其他任何方式表达吗? 表1包含419行 表2包含3374行 Table3包含28182行 编辑: 建议重新格式化 问题答案: 为了提高可读性,我重新构造了查询…从表1的最顶层开始,然后将其绑定到Table3,然后将table3绑定到tab

  • 主要内容:1.内连接,2. 左连接 - LEFT JOIN,3. 右连接 - RIGHT JOIN,4. 全连接 - FULL JOIN顾名思义,连接(JOIN)表示要结合一些东西。 在SQL的情况下,连接(JOIN)表示“组合两个或更多表”。 在SQL中,子句用于组合数据库中两个或多个表的记录。 SQL JOIN的类型 内连接 - INNER JOIN 左连接 - LEFT JOIN 右连接 - RIGHT JOIN 全连接 - FULL JOIN 假设有以下几张表,EMPLOYEE 表的结构