我有三个表,我试图确定@tableA中的CountCol值除以@tableB中的CountCol值是否具有来自@tableC的干净剩余的CountCol值。从我下面的表格中,我只有一个结果集显示KeyCol为100的一行。我可能会想到这个错误,有人可以帮忙吗?
感谢。
Declare @tableA Table ( KeyCol Int , CountCol Int )
Declare @tableB Table ( KeyCol Int , CountCol Int )
Declare @tableC Table ( KeyCol Int , CountCol Int )
Insert Into @tableA Values ( 100 , 12 )
Insert Into @tableA Values ( 101 , 11 )
Insert Into @tableB Values ( 100 , 3 )
Insert Into @tableB Values ( 101 , 3 )
Insert Into @tableC Values ( 100 , 4 )
Insert Into @tableC Values ( 101 , 4 )
答案 0 :(得分:1)
这对大表来说会很慢,但可能没有更好的方法:
SELECT
A.KeyCol AS A_KeyCol,
A.CountCol AS A_CountCol,
B.KeyCol AS B_KeyCol,
B.CountCol AS B_CountCol,
C.KeyCol AS C_KeyCol,
C.CountCol AS C_CountCol
FROM B
CROSS JOIN C
INNER JOIN A ON A.CountCol = B.CountCol * C.CountCol
它查看B和C中每个值的组合,并检查A中是否有一个值是他们的产品。
答案 1 :(得分:1)
你没有说过,但我猜你想要KeyCol
也匹配。如果是这样,那么以下内容应该有效:
SELECT
FROM A
JOIN B
ON a.KeyCol = b.KeyCol
/* Add mod check here? */
JOIN C
ON a.KeyCol = c.KeyCol
WHERE a.CountCol = b.CountCol + C.CountCol
如果b
中的单行可以包含c
和a
中的多行,那么将/* Add mod check here? */
替换为 AND a.KeyCol % b.KeyCol = 0
可能效率更高:
{{1}}
但是如果连接都是1-1,那么这可能会更慢,而不是更快。