0

最初に、私は SQL クエリの作成に関してまだ初心者であると述べたいと思います。このエラーに関する回答を徹底的に検索したところ、かなりの数の回答が得られましたが、どれも役に立たないようです。または、解決策を自分に適用する方法が本当にわからないと言います。

これが私の課題です。申請者のレコードをいくつかの一意の列 (dl_number、parent_id、person_id) とともに保存する申請テーブルがあります。parent_id は、最初のレコードで個々の申請者の履歴レコードを追跡し、各申請者は一意の dl_number を持つように意図されていますが、いくつかの理由で、一部の申請者の dl_number(s) は一意ではないため、次のレコードを識別する必要があります。 dl_number を変更しています。

以下は、[sql error (1241) operand should contain 1 column(s)] エラーが発生している SQL クエリです。

SELECT id,application_id,dl_number,surname,firstname,othername,birth_date,status_id,expiry_date,person_id,COUNT(DISTINCT(dl_number,parent_id,birth_date)) AS NumOccurrences
FROM tbl_dl_application
WHERE status_id > 1
GROUP BY dl_number,parent_id,birth_date
HAVING NumOccurrences > 1

これを解決する方法、またはこれを解決するためのより良い方法について助けてください。

サンプル テーブルと期待される結果

4

2 に答える 2

0

DISTICT は実際にはそのように使用される関数ではありません。一意の行のみを取得することもSELECT DISTICT column1, column2 FROM table、同様SELECT column, count(DISTINCT anothercolumn) FROM table GROUP BY columnにグループ内の一意の行を取得することもできます。

私が理解している問題:テーブルで重複を探します。dl_n‌​umber重複は、 、 、parent_idおよびの 3 つの列の値が同一であると定義されますbirth‌​_date

idまた、それがテーブルの主キーであると想定しています。t2.id <> t.idそうでない場合は、行を一意に識別する条件に置き換えます。

重複したグループが何であるかだけを知りたい場合は、これでうまくいくはずです:

SELECT dl_n‌​umber, parent_id, birth‌​_date, count(*) as NumOccurences  -- You can only add aggregation functions here, not another column unless you group by it.
FROM tbl_dl_application t
WHERE status_id > 1 -- I don't know what this is but it should do no harm.
GROUP BY dl_n‌​umber, parent_id, birth‌​_date
HAVING count(*)>1

ただし、重複した各行の詳細を知りたい場合は、このクエリで次のことがわかります。

SELECT *
FROM tbl_dl_application t
WHERE 
    status_id > 1 -- I don't know what this is but it should do no harm.
    AND EXISTS (
        SELECT 1 
        FROM tbl_dl_application t2
        WHERE
            t2.dl_number = t.dl_number
            AND t2.parent_id = t.parent_id
            AND t2.birth_date = t.birth_date
            AND t2.id <> t.id
    )
ORDER BY dl_n‌​umber, parent_id, birth‌​_date, id;  -- So you have your duplicates nicely next to each other.

目的を誤解した場合はさらに説明するか、解決策が十分に明確でないかどうか尋ねてください。

于 2016-08-17T08:35:23.950 に答える
0
**You have to use only one column while use to DISTINCT function. You used this three field dl_number,parent_id,birth_date. Just use 1 filed from these 3. Then query will run.**

例えば。

SELECT id,application_id,dl_number,surname,firstname,othername,birth_date,status_id,expiry_date,person_id,COUNT(DISTINCT(parent_id)) AS NumOccurrences
FROM tbl_dl_application
WHERE status_id > 1
GROUP BY dl_number,parent_id,birth_date
HAVING NumOccurrences > 1
于 2016-08-17T08:40:03.440 に答える