MySQL基于字段内容连接

时间:2012-06-27 12:20:19

标签: mysql

我有一个MySQL表,结构如下:

MySQL fields

我正在寻找一个select语句,它将连接最后四个字段,如下所示:

ID    Source
1     Search engine
2     Email
3     Coupon mailout
4     Relative of owner

我可以想办法通过使用子查询来选择相关字段来连接基于Type,嵌套子查询来选择非NULL或'Other'的值,然后是JOIN,CONCAT()和a UNION,但这似乎是解决问题的一个非常复杂的方法。

我是否过度思考这个?有更简单的方法吗?

2 个答案:

答案 0 :(得分:1)

如果无法修复数据,只需使用IF()功能即可。在我的例子中,我使用简单的列名来使它更清晰:

mysql> SELECT IF(c1 IS NOT NULL AND c1 != 'Other', c1,
        IF(c2 IS NOT NULL AND c2 != 'Other', c2,
        IF(c3 IS NOT NULL AND c3 != 'Other', c3, c4))) FROM t1;

以上测试过。

如果您需要经常使用它,可以使用它来制作存储函数。

但是,如果可以,修复表结构?

答案 1 :(得分:0)

我估计你需要一些IFIFNULL s,例如:

SELECT ID, IF(Type='Online', IFNULL(OnlineSourceOther, OnlineSource), IFNULL(OfflineSourceOther, OfflineSource)) AS Source FROM referrals

完全未经测试,YMMV,祝你好运,让我们知道它是怎么回事。