0

同一 (6) 列で、エントリが異なる 2 つのテーブルがあります。テーブル A と B のすべての一意のエントリを含む、同じ列を持つ「マスター」テーブルを取得したいと考えています。どちらのテーブルにも主キーまたは外部キーは存在せず、エントリの「一意性」はそれぞれによって決定されます。 6 つのフィールドが別のエントリと同一です。つまり、エントリ x の列 1 がエントリ y の列 1 と同じで、残りのすべての列も同じである場合、これら 2 つのエントリは、同じテーブルに存在するか別のテーブルに存在するかに関係なく、一意ではないと見なされます。私は同様の解決策を調査して見つけましたが、この問題を完全に解決するものはありません。何かご意見は?

4

2 に答える 2

1

AUNIONは間違いなくここで必要なものですが、@PhilCross からのクエリには無関係な項目がいくつかあります。

  1. はすべての列を選択するときに自然にこれを行うGROUP BYため、結果を平坦化する必要はありません。UNION

  2. 同様に、HAVINGも必要ありません。

  3. 最初のリストが結果の列名を決定するため、クエリの列エイリアスはUNION SELECTMySQL によって無視されます。SELECTa に必要なのUNIONは、(a) すべてのSELECTステートメントの列数が同じであること、および (b) 対応する列のデータ型が同じであること、または暗黙的にキャスト可能であることだけです。

  4. かっこも必要ありませんが、クエリが読みやすくなる場合は、かっこを含める必要があります。

したがって、本当に必要なのは次のとおりです。

SELECT column1 AS column1, column2 AS column2, column3 AS column3
FROM table1
UNION SELECT column1, column2, column3
FROM table2
于 2013-05-28T15:14:10.563 に答える
1

ユニオンステートメントを使用できます:

(
    SELECT column1 AS column1, column2 AS column2, column3 AS column3  
    FROM table1 
) UNION (
    SELECT column1 AS column1, column2 AS column2, column3 AS column3 
    FROM table2 
)
GROUP BY column1, column2, column3 
HAVING COUNT(column1, column2, column3)>0
于 2013-05-28T14:54:20.260 に答える