2016-07-28 13 views
0

Sqlite3SELECT属性は同じですが、別の属性が等しくない行はすべて可能ですか?例えばcolumn1 = column1とcolumn2!= column2のすべての行を取得します

SELECT count(*),title,katalogove_cislo FROM records GROUP BY katalogove_cislo ORDER BY count(*) 

このクエリは等しいkatalogove_cisloでグループ化された行を返します。私は同じ列を持つグループを除外したいですpopis。グループ444は同じ列popisを持っている555ため -

だから

id,katalogove_cislo,popis 
1,444,xxx 
2,444,xxx 
3,555,xx 
4,555,xx 
6,555,xy 

katalogove_cisloで一つのグループを返します。

編集:

私はそれをより明確にしようとします。

katalogove_cisloでグループ化すると、同じkatalogove_cisloで「グループ」が得られます。各グループには、同じkatalogove_cisloを持つ複数の行を含めることができます。少なくとも1つの行がグループ内の他の行と異なるタイトルを持つグループだけを取得したい。

id,katalogove_cislo,popis 
1,444,xxx 
2,444,xxx 
3,555,xx 
4,555,xx 
6,555,xy 

私はこのテーブルの上にkatalogove_cisloでグループをすればkatalogove_cislo 444とのグループからの行は、私はこのグループを表示したくない等しいpopis(XXXとXXX)を有しているので、私は、444と555を得る。しかし。 katalogove_cislo 555の2番目のグループには同じタイトルがありません - xx == xx!= xyですので、このグループに戻したいと思います。

答えて

1

更新された質問に基づいて、これは機能するはずです。これにより、に1つだけ存在するレコードが除外され、値はpopisになります。

SELECT 
    -- This returns the original values from the source table 
    tb.id, 
    tb.katalogove_cislo, 
    tb.popis 
FROM 
    (
    -- This will return only values in katalogove_cislo where 
    -- there are more than 1 distinct values in popis. 
    SELECT 
     katalogove_cislo, 
     COUNT(DISTINCT popis) AS popis_count 
    FROM 
     records 
    GROUP BY 
     katalogove_cislo, 
    HAVING 
     COUNT(DISTINCT popis) > 1 
    ) ta 
INNER JOIN 
    records tb 
    ON (ta.katalogove_cislo = tb.katalogove_cislo) 

このデータセットを皮切り:

id | katalogove_cislo | popis 
----------------------------- 
1 | 444   | xxx 
2 | 444   | xxx 
3 | 555   | xx 
4 | 555   | xx 
5 | 555   | xy 

クエリが返す必要があります:

id | katalogove_cislo | popis 
----------------------------- 
3 | 555   | xx  
4 | 555   | xx 
5 | 555   | xy 
+0

回答ありがとうございます。明確にするには - この条件で行を取得したい:katalogove_cisloが同じ行グループがある場合、これらの行のタイトルがすべて一致していない場合は、katalogove_cisloを戻します。だから同じkatalogove_cisloで同じタイトルではない行が必要です。 –

+0

@ミラノ - あなたが求めていることは100%わかりません。あなたのポストを更新して、あなたのテーブルのデザインとデータに関する詳細と詳細を教えてください。 – Nicarus

+0

私はそれをもっと詳しく説明しようとしました。質問のボトムをチェックしてください。ありがとう –

0

をあなたはグループのすべての行全体で確認したい、これはあなたがロジック以下に適用する必要があります。

SELECT 
    count(*) AS cnt, 
    katalogove_cislo 
FROM 
    records 
GROUP BY 
    katalogove_cislo 
HAVING -- at least two different values 
    MIN(popis) <> MAX(popis) 
ORDER BY 
    cnt 
関連する問題