【问题标题】:MySQL Where IS NOT ALL NULL?MySQL 哪里不是全部为空?
【发布时间】:2020-04-30 11:01:36
【问题描述】:

能够验证所有选定记录的查询如何不为空? 例如,使用以下查询, 验证所有带有字段is_field_null 的行不是来自返回的level1NULL

SELECT * FROM (
SELECT tb_a.A, tb_b.is_field_null FROM tb_a, tb_b, tb_c
WHERE tb_a.a = "some" AND tb_a.b = "thing" AND tb_c.c = "else"
AND tb_a.b = tb_b.a
AND tb_c.b = tb_b.c
) AS level1

假设level1 中有一些带有is_field_null 的行确实是NULL 并且表格是

tb_a

a          |    b        |      A
------------------------------------------
"some"     | "thing"     | "XXX"
"some"     | "thing"     | "YYY"

tb_b

a            | c           | is_field_null 
----------------------------------------------
"thing"       | "else"      | "I have things here" 
"thing"       | "else"      | NULL

tb_c

b            | c           | mapper 
----------------------------------------------
"else"       | "else"      | "ZZZ" 
"else"       | "else"      | "KKK"

我尝试了以下方法,它返回一些行,is_field_null 不为空。例如

A        |     is_field_null
-----------------------------
"XXX"    | "I have things here"
"YYY"    | "I have things here"
SELECT * FROM (
SELECT tb_a.A, tb_b.is_field_null FROM tb_a, tb_b, tb_c
WHERE tb_a.a = "some" AND tb_a.b = "thing" AND tb_c.c = "else"
AND tb_a.b = tb_b.a
AND tb_c.b = tb_b.c
) AS level1
WHERE level1.is_field_null IS NOT NULL

我希望有一张空桌子。我该怎么做?

例如

SELECT * FROM (
SELECT tb_a.A, tb_b.is_field_null FROM tb_a, tb_b, tb_c
WHERE tb_a.a = "some" AND tb_a.b = "thing" AND tb_c.c = "else"
AND tb_a.b = tb_b.a
AND tb_c.b = tb_b.c
) AS level1
WHERE level1.is_field_null IS NOT ALL NULL ??

【问题讨论】:

  • 更新您的问题添加清晰的数据样本和预期结果

标签: mysql null where-clause


【解决方案1】:

如果你运行的是 MySQL 8.0,一个简单的方法是使用窗口函数:

SELECT *
FROM (
    SELECT 
        tb_a.A,
        tb_b.is_field_null,
        MAX(tb_b.is_field_null IS NULL) has_null
    FROM tb_a 
    INNER JOIN tb_b ON tb_a.b = tb_b.a
    INNER JOIN tb_c ON tb_c.b = tb_b.c
    WHERE 
        tb_a.a = 'some' 
        AND tb_a.b = 'thing' 
        AND tb_c.c = 'else'
) t
WHERE has_null = 0

请注意,这使用标准的显式连接而不是老式的隐式连接 - 这种古老的语法不应该在新代码中使用。

我还建议使用单引号而不是双引号作为文字字符串(这是 MySQL 语法)。

【讨论】:

    猜你喜欢
    • 2014-08-10
    • 2010-11-22
    • 2020-11-13
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2016-07-30
    • 2011-04-06
    • 2012-10-05
    相关资源
    最近更新 更多