繁体   English   中英

MySQL SELECT 有条件的 NULL 列

[英]MySQL SELECT with conditionally NULL column

我是 SQL 编程的新手,遇到了一些麻烦。 我有以下 MySQL 脚本:

SELECT
    MyPrimaryTable.PrimaryKey, Alias1.String AS Output1,
    CASE
        WHEN Id2 IS NOT NULL THEN Alias2.String
        ELSE ""
    END AS Output2
FROM MyPrimaryTable, MySecondaryTable AS Alias1, MySecondaryTable AS Alias2
WHERE
    MyPrimaryTable.Id1 = Alias1.Id1
    AND ((MyPrimaryTable.Id2 IS NULL) OR (MyPrimaryTable.Id2 = Alias2.Id2));

基本上,我有一个包含两个 ID(Id1 和 Id2)的主表,我试图将这些 ID 中的每一个与辅助表中的字符串相关联,并在 SELECT 结果中显示这些字符串。 但是,允许主表中的第二个 ID 为 NULL。 在这种情况下,我想要的 output 是预期的第一个字符串,第二个字符串为空白(“”)。 我编写的脚本就是这样做的,除了它为每个可能的字符串添加一个新行,即使所有行看起来都一样。

可能的字符串 Foo1、Foo2、Foo3 和 Foo4 的预期结果,表中有两个条目:

PK   Output1 Output2
1    Foo1    Foo4
2    Foo2

我得到什么:

1    Foo1    Foo4
2    Foo2
2    Foo2
2    Foo2

我怎样才能清理它并使其按预期工作? 谢谢。

编辑:我希望不要使用 DISTINCT,因为我想在 VIEW 中使用它,并且 DISTINCT 会使视图不可更新。

尝试分组

GROUP BY MyPrimaryTable.PrimaryKey

在另一端,您可以加入不使用 WHERE 的表

SELECT
    MyPrimaryTable.PrimaryKey, 
    Alias1.String AS Output1,
    CASE
        WHEN Id2 IS NOT NULL THEN Alias2.String
        ELSE ""
    END AS Output2
FROM MyPrimaryTable, 
    LEFT JOIN MySecondaryTable AS Alias1 ON MyPrimaryTable.Id1 = Alias1.Id1
    LEFT JOIN MySecondaryTable AS Alias2 ON MyPrimaryTable.Id2 = Alias2.Id2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM