-1

私のSQLクエリの何が問題になっていますか?関係に基づいて他のテーブルを結合しながら、を使用Joinして同時に別のテーブルからすべてのテーブルを取得しようとしています。UNION

ただし、次のエラーが発生します。

"The used SELECT statements have a different number of columns"

私の質問:

SELECT a.ESN, a.UnixTime, a.Payload, a.Timestamp
                ,b.AlarmingStatus
                ,b.STxModel
                ,c.GroupID
                FROM STxMessage a
                JOIN STx b ON b.ESN = a.ESN
                JOIN GroupInfo c ON b.GroupID = c.GroupID
                WHERE b.STxModel = 190
                AND a.AlarmsChecked="y"
                AND c.AlertsMasterSwitch="on"
               UNION ALL 
      SELECT d.ESN , d.UnixTime,  d.Payload,  d.Timestamp FROM STxMessageArchive d
4

4 に答える 4

5

エラーメッセージはそれをすべて言います。

を使用する場合UNION、結合されたSELECTステートメントによって返される列は同じでなければなりません。

SELECT col1, col2, col3 FROM table1
UNION
SELECT col1, col2, col3 FROM table2

列が一致しない場合でも、列にダミーデータを提供する必要がある場合は、結合できます。

SELECT col1, col2, col3 FROM table1
UNION
SELECT col1, col2, '' AS col3 FROM table2

したがって、クエリでは、次のようになります

SELECT  a.ESN, a.UnixTime, a.Payload, a.Timestamp ,
        b.AlarmingStatus, b.STxModel, c.GroupID
FROM    STxMessage a
        INNER JOIN STx b 
            ON b.ESN = a.ESN
        INNER JOIN GroupInfo c 
            ON b.GroupID = c.GroupID
WHERE   b.STxModel = 190 AND 
        a.AlarmsChecked="y" AND 
        c.AlertsMasterSwitch="on"
UNION ALL 
SELECT  d.ESN, d.UnixTime, d.Payload, d.Timestamp,
        NULL AS AlarmingStatus, NULL AS STxModel, NULL AS GroupID
FROM    STxMessageArchive d
于 2013-01-18T09:34:12.740 に答える
1

こんにちは、これは最初のクエリの余分な列です

 ,b.AlarmingStatus
 ,b.STxModel
 ,c.GroupID

2番目のクエリでこれと同じ列を実行する必要があるか、操作unionを実行するにはこの列を削除する必要がありますunion

于 2013-01-18T09:33:50.317 に答える
0

最初のクエリは 7 列を選択していますが、2 番目のクエリは 4 列しか選択していません。2 番目のクエリが最初のクエリと同じ数の列を選択していることを確認してUnion Allください。

SELECT a.ESN, a.UnixTime, a.Payload, a.Timestamp
                ,b.AlarmingStatus
                ,b.STxModel
                ,c.GroupID
                FROM STxMessage a
                JOIN STx b ON b.ESN = a.ESN
                JOIN GroupInfo c ON b.GroupID = c.GroupID
                WHERE b.STxModel = 190
                AND a.AlarmsChecked="y"
                AND c.AlertsMasterSwitch="on"
               UNION ALL 
      SELECT d.ESN , d.UnixTime,  d.Payload,  d.Timestamp, 'null' as AlarmingStatus,
      'null' as STxModel, 'null' as GroupID FROM STxMessageArchive d
于 2013-01-18T09:35:10.690 に答える
0

エラーが示すように、最初の部分には 7 つの列があり、2 番目の部分には 4 つしかありません。共用体は両側に同じ列が必要です。どちらかを削除します

b.AlarmingStatus ,b.STxModel ,c.GroupID 

最初の部分から、または 2 番目の部分に (偽の) 列を追加します。

于 2013-01-18T09:34:01.423 に答える