我正在寻找像这样的“ALL_EQUAL”函数:
SELECT *
FROM Table1
INNER JOIN Table2 ON Table2.Field = Table1.Field
INNER JOIN Table3.Field = Table1.Field
WHERE ALL_EQUAL(Table1.Value, Table2.Value, Table3.Value)
我当然可以通过创建一个巨大的“AND”链来实现这一目标。但是在我想要执行此查询的环境中,我必须比较多达7个值,因此一个AND链将是庞大的(目前重组表不是一个选项)。
有没有优雅的方法来做到这一点?
答案 0 :(得分:0)
您可以构建自定义表达式,但它不会简化这些事情。例如:
DECLARE @Value1 TINYINT = 5
,@Value2 TINYINT = 5
,@Value3 TINYINT = 5
,@Value4 TINYINT = 3;
SELECT IIF(CONCAT(@Value1, @Value2, @Value3, @Value4) = REPLICATE(@Value1, 4), 1, 0)
GO
DECLARE @Value1 TINYINT = 5
,@Value2 TINYINT = 5
,@Value3 TINYINT = 5
,@Value4 TINYINT = 5;
SELECT IIF(CONCAT(@Value1, @Value2, @Value3, @Value4) = REPLICATE(@Value1, 4), 1, 0)
GO
DECLARE @Value1 TINYINT = 5
,@Value2 TINYINT = NULL
,@Value3 TINYINT = 5
,@Value4 TINYINT = 5;
SELECT IIF(CONCAT(@Value1, @Value2, @Value3, @Value4) = REPLICATE(@Value1, 4), 1, 0)
GO
DECLARE @Value1 VARCHAR(8) = 5
,@Value2 TINYINT = 5
,@Value3 TINYINT = 5
,@Value4 TINYINT = 5;
SELECT IIF(CONCAT(@Value1, @Value2, @Value3, @Value4) = REPLICATE(@Value1, 4), 1, 0)
GO
在这里你可以试试:
AND
这可能会减少一点长度,但您必须使用const getters = {
project: state => {
return id => { // note this passes the id from the component
return state.fram && state.fram.projects // in case async not done yet
? state.fram.projects.find(item => item.id === id)
: null
}
}
}
测试它与标准解决方案相比如何影响性能。
答案 1 :(得分:0)
如果您想使用1个表达式,可以尝试以下方法。但我不认为它比使用单独的比较更好(Value1 = Value2 AND Value1 = Value3 AND Value1 = Value4 ...)。如果你有7个值,则进行6次比较。
SELECT *
FROM Table1
INNER JOIN Table2 ON Table2.Field = Table1.Field
INNER JOIN Table3.Field = Table1.Field
WHERE Table1.Value = ALL(
SELECT Table2.Value UNION ALL
SELECT Table3.Value)