【问题标题】:Query to select all elements not having a certain field查询以选择所有没有特定字段的元素
【发布时间】:2018-04-21 16:03:30
【问题描述】:

首先我使用的是 mysql 5.6

我想选择至少满足以下一项要求的所有元素:

  1. 有特定的领域。
  2. 某个字段有一个空值(对于空我的意思是:len(trim(value)) == 0

我举个例子更清楚

table2
id|field|value
1 |x    |12
1 |y    |23
1 |z    |34
2 |x    |45
2 |y    |56
2 |z    |  <---- is an empty string with 0/1 spaces
3 |x    |67

所以我想要的是,例如,如果我想要所有没有字段 z 的字段,我应该获得 (2,3) 如果所有字段都没有y,我应该获得(3

这是我尝试但没有成功的方法:

SELECT t12.id 
FROM table2 AS t12
WHERE NOT IN ( 
    SELECT t2.id 
    FROM table2 as t2
    WHERE t2.field = 'y' 
        AND t2.value <> '' AND t2.value IS NOT NULL
)

【问题讨论】:

  • 删除错字!谢谢,原来的表结构要复杂得多
  • t1.field 应该是 t2.field。为什么要加入table1?你没有用它做任何事情。
  • 在查询的OR 部分加上括号。见stackoverflow.com/questions/27663976/…
  • @Barmar 我重写了查询,现在更简单了
  • 你为什么要检查t2.value?问题描述中没有提到该列。

标签: mysql sql select


【解决方案1】:
select id from t group by id
having min(len(value)) = 0 or count(case when field = 'x' then 1 end) = 0

如果条件必须由单行而不是整个组满足,则在 case 中组合多个条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多