我们使用hibernate来处理不同的数据库。 当数据源是MS SQL时,使用对比较sql存在问题。 我们想知道如何为ms sql转换此语句。
以下是简化的sql。
通知:
代码:
select * from table1 t1
where (t1.column1, t1.column2) in
select ( sub.column1, sub.column2) from table2 sub
where sub.column3 = $var
以下是我的试用版 我担心它在字符串比较中的低性能并且使索引无效。
SELECT *
FROM TABLE_1 T1
WHERE CAST(COL1 AS VARCHAR(19))+CAST(COL2 AS VARCHAR(19))
IN (SELECT CAST(COL1 AS VARCHAR(19))+CAST(COL2 AS VARCHAR(19))
FROM TABLE_2 T2
WHERE T2.COL3 = 'A')
对我们有什么建议吗? 非常感谢!!
答案 0 :(得分:2)
为什么你必须做一个Where-In子句而不是一个连接?
select t1.* from table1 t1 inner join table2 sub on t1.column1 = sub.column1 and t1.column2 = sub.column2 and sub.column3 = $var
答案 1 :(得分:0)
假设表格如下:
CREATE TABLE SuperHeroes
(
name varchar(100),
franchise varchar(100)
);
目前的数据是
'Batman', 'DC'
'SpiderMan', 'Marvel'
'Superman', 'DC'
'Wolverine', 'Marvel'
您想查询
SELECT name, franchise
FROM SuperHeroes
WHERE
(name, franchise)
IN
(
'Superman', 'DC',
'Wolverine', 'Marvel'
)
但那不会执行。因为它是语法错误。正确的语法是
SELECT name, franchise
FROM SuperHeroes h
WHERE
NOT EXISTS
(
(SELECT h.name, h.franchise)
EXCEPT
(
SELECT 'Superman', 'DC'
UNION
SELECT 'Wolverine', 'Marvel'
)
)
希望它会奏效。