【发布时间】:2012-07-06 14:10:06
【问题描述】:
假设我有三个不同的选择语句,像这样
SELECT 'Final', ID FROM Stage WHERE stageCompleted = 1;
SELECT 'Active', ID FROM Stage WHERE StartDate < NOW();
SELECT 'Inactive', ID FROM Stage;
我想要的是某种组合这些的方法,以便显示一个表格
- 返回字符串
'Final'和第一个查询匹配的所有行的行 ID - 返回字符串
'Active'和第二个查询匹配但第一个查询不匹配的所有行的行 ID - 并返回字符串
'Inactive'和所有剩余行的ID。
我查看了各种联接,但它们似乎并不真正适合我要解决的问题。如何在 SQL 中组合三个选择查询,其中每个查询都排除了前一个查询的结果?
【问题讨论】:
-
换个角度思考问题。您希望返回 Stage 表中的每一行,但每一行将只有一个“状态”。您可以通过 UNIONing 三个不同的结果集获得相同的结果集,并使用反连接模式来限制每个返回的行,但这不是必需的(在您的情况下),并且这样的查询几乎不会那么有效作为对 Stage 表的单次扫描。