我以前写这样的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)
这真的有所作为吗?
假设,我有一个从客户端发送的字符串列表,在本例中是区域.我有一张名为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) 说我有这样的查询:
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) 我一直在寻找一段时间,遗憾的是似乎找不到解决方案.
基本上我有一个逗号分隔的关键字字符串,我已经使用一个函数转换成一个列表,该函数接受一个@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'%'+任意关键字+'%'.
任何帮助将不胜感激.
谢谢
我在我的域模型中有一个一对多的关系,我基本上想要阅读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)
现在我想Foos用Bars特定颜色的特定名称阅读:
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) 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