2

私が構築しようとしているクエリは、tableAの次の列を使用します。

  • 名前
  • 説明

クエリは次のフィルターを提供する必要があります。

  • 重複していないtableAから名前を選択します
  • 説明が重複していない名前のみを選択してください
  • 文字列を含まない説明を選択してください:「Any」または「Deleted」
  • 名前で注文する

これが私の現在のステートメントで、重複した説明を除いてすべてを示しています。これを現在のステートメントに追加するにはどうすればよいですか?

選択する

 DISTINCT name FROM tableA

 WHERE description NOT LIKE 'Any%'

 AND description NOT LIKE 'Deleted%'

名前で注文

4

4 に答える 4

1

自己結合を使用してみてください。
左側の表を使用して、「Any」または「Deleted」で始まる説明をフィルタリングします。説明が重複している行を削除したいので、同じ説明で異なる名前の右側の一致する行が見つからなかった結果のみを選択します。

SELECT
    leftSide.name,
    leftSide.description
FROM
    tableA as leftSide
    LEFT JOIN tableA as rightSide ON (
        leftSide.description = rightSide.description AND
        leftSide.name <> rightSide.name
    )
WHERE
    rightSide.description IS NULL AND
    leftSide.description NOT LIKE 'Any%' AND
    leftSide.description NOT LIKE 'Deleted%'
GROUP BY
    leftSide.name, leftSide.description
ORDER BY
    leftSide.name
于 2012-11-29T01:51:04.103 に答える
0
SELECT

 DISTINCT name FROM tableA

 WHERE description NOT LIKE 'Any%','Deleted%'

ORDER BY name
于 2012-11-29T01:41:32.970 に答える
0

これはあなたが探している解決策になりますか?

参照:SQLFIDDLE

クエリ:

select distinct name, des
from data
where des not like '%any%'
and des not like '%delete%'
order by name ASC;

結果:

NAME    DES

mary    yeah all or none
tim     yeah all or none
you     did you see he is in
于 2012-11-29T01:42:03.687 に答える
0

SELECT t.name FROM tableA AS t GROUP BY t.name HAVING COUNT(*)= 1 AND t.description NOT LIKE'Any%' AND t.description NOT LIKE'Deleted%' ORDER BY t.name;

于 2012-11-29T07:24:31.143 に答える