【问题标题】:MySQL WHERE clause is getting ignored in SELECT MIN() subqueryMySQL WHERE 子句在 SELECT MIN() 子查询中被忽略
【发布时间】:2017-09-22 17:13:59
【问题描述】:

我正在运行这个查询:

SELECT prop_numero, prop_id, prop_fase_id
FROM propiedades 
WHERE prop_numero = (
    SELECT MIN(prop_numero)
    FROM propiedades 
    WHERE prop_numero > 11 AND prop_fase_id = 2
);

得到这个:

| prop_numero | prop_id | prop_fase_id |
|-------------|---------|--------------|
| 111         |     166 |            1 |
|-------------|---------|--------------|
| 111         |     233 |            6 |
|-------------|---------|--------------|
| 111         |     657 |            2 |
|-------------|---------|--------------|
| 111         |     658 |            4 |
|-------------|---------|--------------|

我只是期待这个:

| prop_numero | prop_id | prop_fase_id |
|-------------|---------|--------------|
| 111         |     657 |            2 |
|-------------|---------|--------------|

并非总是如此,但有时第二个 WHERE 子句 (prop_fase_id = 2) 会被忽略。子查询的第一个 WHERE 子句发现多于 1 行是正常的,因此第二个子句应该过滤掉大部分,只留下一个,但不,它被忽略了。

为什么?我尝试使用不同的子查询进行结构化,但我没有得到我需要的结果。

【问题讨论】:

  • 忽略是什么意思?解释你想要达到的目标,如果可能的话,说明表格描述和一些示例数据。
  • 谢谢胡安。我的意思是它不会过滤掉 prop_fase_id 列中没有“2”的行。我会发布一些数据。
  • 我认为您需要更多地解释您想要的结果。例如,尚不清楚您为什么使用 min() 。子查询将解析为 prop_numero,在本例中为 111。但主查询将显示在此示例中 prop_numero 为 111 的所有记录,即所有记录。如果您只想要一个结果,则主查询的条件应该是 id 而不是 prop_numero。

标签: mysql select subquery


【解决方案1】:

由于prop_numero列不是key列,所以还需要在WHERE中加上prop_fase_id = 2,即

SELECT prop_numero, prop_id, prop_fase_id
FROM propiedades 
WHERE prop_numero = (
    SELECT MIN(prop_numero)
    FROM propiedades 
    WHERE prop_numero > 11 AND prop_fase_id = 2
) AND prop_fase_id = 2;

【讨论】:

  • 就是这样。谢谢!
猜你喜欢
  • 2015-01-31
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 1970-01-01
  • 2021-01-07
  • 2013-07-30
相关资源
最近更新 更多