1

ほとんど無関係な 3 つのテーブルをクエリしようとしています。3 つすべての関係は 1 つの列 (電子メール アドレス フィールド) です。「ユニオンオール」を作成し、3つのテーブルすべてから電子メールを取得し、最後にグループ化して重複がないことを確認しました(ユニオンも試しました)。

私の問題は、すべて正常に動作することですが、最初のテーブルで各電子メール アドレスが 1、0、または NULL であるかどうかを知る必要があります。列を取得してから、「"" AS Col1」を他のテーブルに追加しようとしました (エラー 1222 を回避し、列を一致させます)。私はこれを行うことができますが、テーブル 1 のデータはテーブル 2 の「何も」によって上書きされ、テーブル 3 のデータは再び何もないことによって上書きされます。

クエリは次のとおりです。

SELECT * FROM (
SELECT email AS emails, COUNT(email) AS qty, '' AS custCountry, '' AS custID, '' AS cName, active AS newsletter
    FROM newsletter
    WHERE email != '' 
    GROUP BY email

UNION ALL

SELECT email AS emails, COUNT(email) AS qty, '' AS custCountry, '' AS custID, '' AS cName, '' AS newsletter
    FROM orders 
    WHERE email != ''
    GROUP BY email

UNION ALL

SELECT email AS emails, COUNT(email) AS qty, country AS custCountry, customerID AS custID, countries.name AS cName, '' AS newsletter
    FROM customers
        LEFT JOIN countries ON customers.country = countries.zoneID
    WHERE email != ''
    GROUP BY email  
) AS newtable

GROUP BY emails
ORDER BY qty DESC

「アクティブ」列を追加するまで機能します。その時点で、アクティブ列にあったものは何も上書きされません。保持する必要がある位置データを取得するため、そこに 3 番目のテーブルが必要です。最初のテーブルを最後に配置すると、「アクティブ」になりますが、場所の列は上書きされます。

私はMySQLのプロではありません(見てください!)ので、どんな助けでも大歓迎です。

4

2 に答える 2

0

Ok。本当にシンプル。テーブルの結合を選択した、必要なデータを結合するだけです。私の問題を説明しようとするのは、ただ乗り込んで分類するよりも、本当に明白であり、おそらく難しいでしょう。でもありがとう。

于 2011-04-05T08:42:46.787 に答える
0

どのような問題を解決しようとしていますか? 3 つのテーブルすべてをまとめた一意の電子メール アドレスのリストが必要ですか? はいの場合、これを使用できます:

select email from A union select email from B union select email from C

スニペットのグループ化が適切ではありません。group byクエリの場合、select 句には、group by 句に存在するか、次のような集計関数である列のみを含めることができます。min(), max(), avg(),count()

MySQL はこれに対してエラーをスローしませんが、無効な列にいくつかのランダムな値を表示します。他のデータベース、つまり Oracle はエラーをスローします。

于 2011-04-04T17:48:34.493 に答える