Как пропустить соответствующий результат подзапроса? - PullRequest
3 голосов
/ 03 апреля 2012

Используя sqlite3, у меня есть таблица, которая выглядит следующим образом:

+---------+-----------------+----------+-----------+--------+
| ArtId   |    Location     | ArtistID |  Title    |  Size  |
+---------+-----------------+----------+-----------+--------+
|  3      |      China      |   400    |   birds   | small  |
|  4      |      Samoa      |   670    |   stars   | large  |
|  5      |      Chile      |   427    |   clouds  | medium |
|  6      |        US       |   427    |   clouds  | small  |
|  7      |      France     |   123    |   collage | small  |
|  8      |      Spain      |   123    |   collage | large  |
|  9      |     Belarus     |   123    |   collage | medium |
+---------+-----------------+----------+-----------+--------+

У меня есть запрос, который выдает все результаты, где единственными являются результаты с дублирующими заголовками и исполнителями:

SELECT * 
FROM LiveArt c1, (SELECT Title, ArtistID FROM LiveArt GROUP BY Title, ArtistID) c2 
WHERE c1.Title = c2.Title AND c1.ArtistID = c2.ArtistID

для создания следующей таблицы:

+---------+-----------------+----------+-----------+--------+
| ArtId   |    Location     | ArtistID |  Title    |  Size  |
+---------+-----------------+----------+-----------+--------+
|  5      |      Chile      |   427    |   clouds  | medium |
|  6      |        US       |   427    |   clouds  | small  |
|  7      |      France     |   123    |   collage | small  |
|  8      |      Spain      |   123    |   collage | large  |
|  9      |     Belarus     |   123    |   collage | medium |
+---------+-----------------+----------+-----------+--------+

Я хочу получить следующее:

+---------+-----------------+----------+-----------+--------+
| ArtId   |    Location     | ArtistID |  Title    |  Size  |
+---------+-----------------+----------+-----------+--------+
|  6      |        US       |   427    |   clouds  | small  |
|  8      |      Spain      |   123    |   collage | large  |
|  9      |     Belarus     |   123    |   collage | medium |
+---------+-----------------+----------+-----------+--------+

Как мне настроить этот запрос, чтобы сделать это (пропустить первый соответствующий результат)

Ответы [ 3 ]

1 голос
/ 03 апреля 2012
select * from tabName A
where A.ArtId !=
(
    select min(ArtId)
    from tabName B
    group by Title
    having A.Title=B.Title
);

ArtId       Location    ArtistID    Title       Size
----------  ----------  ----------  ----------  ----------
6           US          427         clouds      small
8           Spain       123         collage     large
9           Belarus     123         collage     medium
0 голосов
/ 03 апреля 2012

Возможно, есть более эффективный способ, но что-то вроде этого может решить проблему для вас:

SELECT *
FROM LiveArt c1, 
(
  SELECT Title, ArtistID 
  FROM LiveArt 
  GROUP BY Title, ArtistID
) c2
WHERE c1.Title = c2.Title AND c1.ArtistID = c2.ArtistID 
AND c1.ARTID NOT IN 
( 
  SELECT MIN(ArtID) 
  FROM LiveArt
  GROUP BY Title, ArtistID
)
0 голосов
/ 03 апреля 2012
SELECT c1.* 
FROM LiveArt c1
WHERE EXISTS 
      ( SELECT *
        FROM LiveArt c2
        WHERE c1.ArtID < c2.ArtID 
          AND c1.Title = c2.Title 
          AND c1.ArtistID = c2.ArtistID
      )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...