我有一个带有属性(名称,出发年份)的迁移表。我想写一个查询,给出2001和2003年都迁移过的所有鹳的名字(使用带有IN的子请求),NB:不允许使用WHERE,GROUP BY,ORDER BY,LIMIT之类的子句,除非必需/强制性
SELECT migration.NAME
FROM migration
WHERE migration.DEPARTUREYEAR = 2001
IN(SELECT migration.NAME
FROM migration
WHERE migration.DEPARTUREYEAR = 2001)
此查询给我零结果
我希望输出四个名称,但实际上我有零个名称。 但是当我将查询重写为:
SELECT migration.NAME
FROM migration
WHERE migration.DEPARTUREYEAR IN (
SELECT migration.DEPARTUREYEAR
FROM migration
WHERE migration.DEPARTUREYEAR IN (2001,2003))
GROUP BY migration.NAME
HAVING COUNT (*) = 2
获得结果,但标记为错误。
答案 0 :(得分:1)
您的第一个查询输入的年份不正确。但更重要的是,它缺少IN
之前的比较。所以试试这个:
SELECT m.NAME
FROM migration m
WHERE m.DEPARTUREYEAR = 2001 AND
m.NAME IN (SELECT m2.NAME
FROM migration m2
WHERE m2.DEPARTUREYEAR = 2003
);
我猜您正在使用MySQL。第一个版本解释为:
WHERE (migration.DEPARTUREYEAR = 2001) IN
(SELECT m2.NAME
FROM migration m2
WHERE m2.DEPARTUREYEAR = 2001
)
IN
之前的部分是布尔值,其值为0或1。这可能与任何NAME
值都不匹配。