这是相关数据
SELECT item_group_id
,item_id
,invoice_id
FROM item
WHERE item_group_id = 92480
# Results
92480 215342 88902
92480 215343 88902
92480 215344 88902
92480 215345 88902
92480 215346 90690
92480 215347 90690
92480 215348 NULL
92480 215349 NULL
Run Code Online (Sandbox Code Playgroud)
这是直接查询
SELECT MAX(item_group_id) [item_group_id]
,MAX(invoice_id) [invoice_id]
FROM item
WHERE item_group_id = 92480
GROUP BY invoice_id
# Results
92480 NULL
92480 88902
92480 90690
Run Code Online (Sandbox Code Playgroud)
这是子查询
SELECT i.item_group_id
,i.invoice_id
FROM (
SELECT MAX(item_group_id) [item_group_id]
,MAX(invoice_id) [invoice_id]
FROM item
GROUP BY invoice_id
) i
WHERE i.item_group_id = 92480
# Results
92480 90690
92480 88902
Run Code Online (Sandbox Code Playgroud)
我不确定这里发生了什么,我会假设子查询中的所有结果行都将构成临时表查询,但那些具有null invoice_ids的行不可用.
编辑:正如下面选择的答案所暗示的,这是一个分组问题.该item表中包含更多item条目,并且具有不同的item_group_ids.由于item_group_id未按子分类,因此在子查询中将具有空invoice_id字段的所有项组合在一起.然后,MAX(item_group_id)选择将返回最高item_group_id,而不是直接查询中的任何一组相同的item_group_ids.
改变GROUP BY invoice_id以GROUP BY item_group_id, invoice_id产生我正在寻找的东西.
结果是不同的,因为WHERE过滤器在两个查询中的查询执行的不同阶段应用.
首先WHERE应用第一个查询,然后对结果进行分组,而在第二个查询中GROUP首先完成ing(因为它在子查询中),并且在分组结果上应用where.
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |