2016-07-13 5 views
0
私はそれで同じIDを持つ組み合わせた2つのテーブルに必要な

の数が異なる使用しかし、私は私が今行く方法を知らないMYSQLザ・は、SELECT文が列

SELECT stat.user_id, user.username, 
     SUM(stat.vertrag) AS vertrag, 
     SUM(stat.zubehoer) AS zubehoer, 
     SUM(stat.privat) AS privat, 
     SUM(stat.service) AS service, 
     SUM(stat.bs_vertrag) AS bus 
      FROM statistics stat 
     join users user on stat.user_id = user.uid 
     WHERE stat.user_id != '0' AND stat.datum LIKE '%$month%' 
     GROUP BY stat.user_id 
UNION 
    SELECT bew.user_id, stat.user_id, user.username, 
     SUM(case when bew.log = 'inv_imei' 
       THEN 
         1 
       ELSE 
         0 
       END) AS inv 
     FROM user_bewegungen bew 
     JOIN users user ON user.uid = bew.user_id 
     JOIN statistics stat ON bew.user_id = stat.user_id 
     WHERE bew.date LIKE '%$month%' 
     GROUP BY bew.user_id 
     ORDER BY vertrag DESC 

することはできません....

最初の選択は完璧で、機能します。行 "ログ"を追加する必要があるので、今私は組合を追加しました。 IDは、それにもありますが、私はエラーになっ

使用SELECTステートメントは、列

の数が異なる、誰が助けることはできますか?

答えて

0

UNIONには、フィールド番号が同じである必要があります。このように使用:

SELECT stat.user_id, 0, user.username, .... 

SELECT bew.user_id, stat.user_id, user.username, ... 

あなたが知っている、それが欠けているフィールドです。

データ型も同じである必要があります。

+0

'NULL'は、あなたが右でもある任意のデータ型 –

+0

@VigneshKumarを持っていないdoest私は自分の答えを更新しました。終わり。 – vaso123

+0

@lolka_bolkaあなたは動作し、エラーが表示されない「NULL」 –

2

各selectステートメントは、同じ数の列を持つ必要があります。あなたの最初のものは7を持っています

SELECT 
    stat.user_id, 
    user.username, 
    SUM(stat.vertrag) AS vertrag, 
    SUM(stat.zubehoer) AS zubehoer, 
    SUM(stat.privat) AS privat, 
    SUM(stat.service) AS service, 
    SUM(stat.bs_vertrag) AS bus 

あなたの二番目の4を持っている:

SELECT 
    bew.user_id, 
    stat.user_id, 
    user.username, 
    SUM(case when bew.log = 'inv_imei' THEN 1 ELSE 0 END) AS inv 

あなたが最初のものではありませんそれらの列のために第二SELECTNULLを選択することができます。

+0

のデータ型を維持しません。ありがとうございます – joergi1988

1

UNION同形の2つのオペランドを作成します。列の名前を変更し、必要に応じてNULL値のダミー列を作成して、同じ形状にします。

SELECT a, b, c 
FROM table1 

と::我々がUNIONを形成したい場合たとえば、

SELECT d, e 
FROM table2 

我々は、論理的に(このケースでは、のは、そのaを想定してみましょう同じ種類のものであり、それらの列をペアう次のようにeは、同じタイプのものであり、そしてbdと同じタイプのものである)とSELECT右側の第三の投影属性として余分NULL値の列を追加します。

SELECT b, a, c 
FROM table1 
UNION 
SELECT d AS b, e AS a, NULL as c 
FROM table2 

このようなアプローチが混乱しているように見える場合は、テーブルビューを使用して表現を簡素化できます。前の例では、table2の頂上ビュー主張している可能性があり:

CREATE VIEW t2view(b, a, c) 
AS 
SELECT d, e, NULL 
FROM table2 

をして、としてあなたUNIONを策定:

SELECT b, a, c 
FROM table1 
UNION 
SELECT * 
FROM t2view 
+1

少し少ない**シューティング**これはより読みやすくするかもしれません – RiggsFolly

+0

thats良い翻訳とクリア!ありがとう! – joergi1988