0

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

MySQL 字段

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

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

我可以想办法做到这一点,通过使用子查询来选择基于类型连接的相关字段,嵌套子查询来选择不是 NULL 或“其他”的值,然后是 JOIN、CONCAT() 和 UNION,但是这似乎是解决问题的一种非常复杂的方法。

这是我想太多了吗?有没有更简单的方法?

4

2 回答 2

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;

以上经过测试。

如果你需要经常使用它,你可以用它来做一个存储函数。

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

于 2012-06-27T12:31:45.340 回答
0

我认为您将需要一些IFIFNULL,例如:

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

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

于 2012-06-27T12:29:02.677 回答