相关疑难解决方法(0)

使用存在1或存在的子查询*

我以前写这样的EXISTS检查:

IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters)
BEGIN
   UPDATE TABLE SET ColumnsX=ValuesX WHERE Where Columns=@Filters
END
Run Code Online (Sandbox Code Playgroud)

前一个DBA中的一个告诉我,当我做一个EXISTS条款时,请使用SELECT 1而不是SELECT *

IF EXISTS (SELECT 1 FROM TABLE WHERE Columns=@Filters)
BEGIN
   UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters
END
Run Code Online (Sandbox Code Playgroud)

这真的有所作为吗?

sql t-sql sql-server

84
推荐指数
4
解决办法
2万
查看次数

SQL INNER JOIN vs存在性能考虑因素

假设,我有一个从客户端发送的字符串列表,在本例中是区域.我有一张名为Compliance Regions的表格.我想搜索具有name属性的行,并且该行应该存在region项.

在LINQ中,我可以通过两种不同的方式完成它.如下所示,它们产生两种不同的SQL查询.我的问题是我应该选择哪个?哪个查询具有更好的性能?

 List<string> regions = new List<string>() { "Canada", "EN 50530" };

           var cregions = from c in complianceRegions
                           from r in regions
                           where c.Name.Equals(r)
                           select c;

            var cregions2 = from c in complianceRegions
                            where regions.Any(x => x == c.Name)
                            select c;
Run Code Online (Sandbox Code Playgroud)

生成的sql如下所示.

      -- cregions
   SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Name] AS [Name], 
    [Extent1].[Description] AS [Description]
    FROM  [Administration].[ComplianceRegions] AS [Extent1]
    INNER JOIN  (SELECT 
        N'Canada' AS [C1]
        FROM  ( SELECT 1 AS X ) AS [SingleRowTable1]
    UNION ALL
        SELECT 
        N'EN …
Run Code Online (Sandbox Code Playgroud)

sql linq sql-server performance join

6
推荐指数
1
解决办法
2809
查看次数

基于其他行排除行(SQL)

说我有这样的查询:

SELECT *
FROM TABLE
Run Code Online (Sandbox Code Playgroud)

它返回:

TABLE
ID | DATA | VAL
===============
01 | ABCD | 1
01 | DEFG | 2
02 | FGHI | 3
02 | HIJK | 2
03 | JKLM | 3
03 | LMNO | 4
04 | NOPQ | 0
04 | PQRS | 1
Run Code Online (Sandbox Code Playgroud)

目前我有一个查询,试图找到这样的好值,但它是有缺陷的,因为包含其他行中的VAL不好的ID,这不是我想要的.

SELECT *
FROM TABLE
WHERE TABLE.VAL IN ("1","2","3")
Run Code Online (Sandbox Code Playgroud)

将返回此(缺少LMNO和PQRS):

TABLE
ID | DATA | VAL
===============
01 | ABCD | 1
01 | DEFG | 2 …
Run Code Online (Sandbox Code Playgroud)

sql progress-db

3
推荐指数
1
解决办法
5176
查看次数

MsSql where field LI INKE(LIST)

我一直在寻找一段时间,遗憾的是似乎找不到解决方案.

基本上我有一个逗号分隔的关键字字符串,我已经使用一个函数转换成一个列表,该函数接受一个@String并返回一个TABLE(Value varchar(30)).到现在为止还挺好.

我现在可以在where子句中使用此列表,如下所示:

SELECT project.*
FROM Projects project 
WHERE project.title IN (SELECT * FROM dbo.ParamsToList('.net,test'))
Run Code Online (Sandbox Code Playgroud)

这与project.title完全(等于)任何一个关键字(.net或test)相匹配.

我需要的是匹配标题是LIKE'%'+任意关键字+'%'.

任何帮助将不胜感激.

谢谢

sql-server search where-clause

3
推荐指数
1
解决办法
4789
查看次数

将 MyBatis ResultMap 中的非列参数传递给嵌套选择

我在我的域模型中有一个一对多的关系,我基本上想要阅读Foos和过滤的集合,Bars其中包含一个 MyBatis select 语句,使用嵌套选择Bars.

解释一下:我的领域模型类看起来或多或少是这样的(真正的领域模型当然更复杂,但我的问题归结为这个):

public class Foo {
   private String name;
   private Set<Bar> bars;
   // getters and setters omitted
}

public class Bar {
   private String color;
   // getters and setters omitted
}
Run Code Online (Sandbox Code Playgroud)

现在我想FoosBars特定颜色的特定名称阅读:

public interface FooRepository {
  public List<Foo> selectFoosWithBars(String name, String color);
}
Run Code Online (Sandbox Code Playgroud)

我的 MyBatis XML Mapper 文件的相关部分如下所示:

<select id="selectFoosWithBars" resultMap="fooResult">
   SELECT f.id f_id, f.name f_name FROM foos f WHERE f.name = #{name}
</select>

<select id="selectBars" resultMap="barResult"> …
Run Code Online (Sandbox Code Playgroud)

java sql mybatis

2
推荐指数
1
解决办法
4559
查看次数

标签 统计

sql ×4

sql-server ×3

java ×1

join ×1

linq ×1

mybatis ×1

performance ×1

progress-db ×1

search ×1

t-sql ×1

where-clause ×1