0

次のような構造の MySQL テーブルがあります。

MySQL フィールド

次のように最後の 4 つのフィールドを連結する select ステートメントを探しています。

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

サブクエリを使用して Type に基づいて連結する関連フィールドを選択し、ネストされたサブクエリを使用して NULL または 'Other' ではない値を選択し、続いて 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 に答える