我是SQL编程的新手,并且有点麻烦。我有以下MySQL的脚本:有条件的NULL列的MySQL SELECT
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。在这种情况下,我希望的输出是预期的第一个字符串,第二个字符串为空(“”)。我写的脚本是这样做的,只是它为每个可能的字符串添加了一个新行,尽管所有行看起来都是一样的。
预期结果有可能的字符串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_CONCAT()? http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat – 2011-05-02 08:23:08