我有一个带有状态列的子表。当我从父表中选择列时,我还要报告基于子表中所有相关行的计算状态。状态的计算非常简单:如果相关子表行中的所有状态均为0,则查询中的状态将设置为0。否则,状态将设置为非零值(实际值是)。
我对查询的实现(如下所示)在相关的子行上使用SUM()。这种方法很好用。但是,由于SUM()的原因,我需要对从另外两个表中选择的所有列进行GROUP BY。
有更好的方法吗?按这么多列分组时,我应该担心性能吗?
样本中省略了Btw,键,索引和关系。
示例表和存储过程:
function createGrid(rows, cols) {
let mousePressed = false;
let wordsFound = 0;
let selectedText = '';
let selectedCells = [];
let variables = [];
grid.style.setProperty('--grid-rows', rows);
grid.style.setProperty('--grid-cols', cols);
for (var row = 0; row < rows; row++) {
for (var column = 0; column < cols; column++) {
let cell = document.createElement('div');
cell.innerText = randomChoice(alphabet);
cell.id = `${column} ${row}`;
cell.onmousedown = function() {
console.log(cell)
console.log(selectedText)
variables = mouseDown(cell, selectedText, selectedCells);
selectedText = variables[0];
selectedCells = variables[1];
mousePressed = variables[2];
}
cell.onmouseover = function() {
variables = mouseOver();
selectedText = variables[0];
selectedCells = variables[1];
}
cell.onmouseup = function() {
variables = mouseUp(cell, selectedText, selectedCells);
selectedText = variables[0];
selectedCells = variables[1];
mousePressed = variables[2];
}
grid.appendChild(cell).className = 'grid-item';
}
}
}
答案 0 :(得分:3)
您可能会发现使用相关子查询可以提供更好的性能:
SELECT c.Name, c.PhoneNumber, o.OrderId, o.Description1, o.Description2, o.Description3,
o.[Date], o.Amount, o.[RecommendedBy]
(SELECT SUM(i.Status)
FROM OrderItem i
WHERE i.OrderId = o.OrderId
) AS [ItemStatus]
FROM [Order] o JOIN
[Customer] c
ON c.CustomerId = o.CustomerId
WHERE o.CustomerId = @CustomerId;
使用如此少量的数据(单个客户),这可能不会对性能产生很大的影响,但是查询更易于维护。