1

次のようなデータを含むテーブルがある場合:

   Col1 |  Col2 | Col3

   111  |  a     | 

   222  |  b     |  1

   111  |        |

そして、一時テーブルからのみ Distinct Col1 を選択し、別のテーブルに挿入したいと考えています。しかし、上記のテーブルでは、Col2 データが異なるため、2 番目の「111」も選択されます。

または、 Distinct Col1 only を選択すると、他の列のデータは無視されます...

この問題を解決する方法はありますか?同じ Col1 データの最初に挿入された行のみを選択したいと考えています。

私はこのクエリを使用しています:

mysql_query("INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT DISTINCT Col1,Col2,Col3 FROM TempTable"); 

返信ありがとうございます。

PS: 質問に応じてタイトルを指定する方法がわかりません...おそらく誰かが私を助けることができます.

4

4 に答える 4

2

多分このようなものです(これはおそらくあなたが望むものです):

INSERT INTO Tableb
(
    Col1,Col2,Col3
)
SELECT
    t.Col1,
    MAX(t.Col2) AS Col2,
    MAX(t.Col3) AS Col3
FROM
    TempTable as t
GROUP BY
    t.Col1

または、MIN 値が必要な場合。このような:

INSERT INTO Tableb
(
    Col1,Col2,Col3
)
SELECT
    t.Col1,
    MIN(t.Col2) AS Col2,
    MIN(t.Col3) AS Col3
FROM
    TempTable as t
GROUP BY
    t.Col1
于 2012-04-13T12:42:11.417 に答える
1

最初に、col1の個別の値ごとに最後のIDを決定する必要があります。次に、このIDを含む行を選択します。

INSERT DELAYED INTO Tableb (Col1,Col2,Col3) 
SELECT TempTable.Col1, TempTable.Col2, TempTable.Col3
from TempTable
inner join
(
   select Col1, max(ID) ID
     from TempTable
    group by Col1
) c
ON TempTable.ID = c.ID

内部クエリは挿入されるIDを返すため、それらを元のテーブルに結合するだけでテーブルをフィルタリングできます。

最初にTempTableレコードを挿入する場合は、max(id)をmin(id)に置き換えます。

于 2012-04-13T12:48:06.307 に答える
0
mysql_query("INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT Col1, MAX(t.Col2) AS Col2, MAX(t.Col3) AS Col3 FROM TempTable GROUP BY Col1");
于 2012-04-13T12:44:11.500 に答える
0
INSERT DELAYED INTO Tableb (Col1,Col2,Col3) SELECT Col1,Col2,Col3 FROM TempTable GROUP BY Col1 ORDER BY [your way of sorting here]

それはそれをしますか?

于 2012-04-13T12:44:51.103 に答える