Выберите из таблицы, где есть несколько записей в одной строке - PullRequest
0 голосов
/ 22 марта 2012

У меня есть несколько таблиц MySQL, таких как:

ids            urns             urn_urls     urls
id | type    id | uid | urn    uid | lid    lid | url
---+-----    ---+-----+-----   ----+----    ----+----
1  | 1        1 | 1   | urn1    1  |  1       1 | url1
2  | 4        2 | 2   | urn2    1  |  2       2 | url2      
3  | 4        2 | 3   | urn3    2  |  3       3 | url3
4  | 4        3 | 4   | urn4    2  |  4       4 | url4
...|...       3 | 5   | urn5    3  |  4       5 | url5
.             4 | 6   | urn6    4  |  5       6 | url6
.            ...| ... | ...     5  |  5      ...| ...
.                               6  |  1
.                               6  |  6

Я хотел бы получить запрос, в котором перечислены те записи идентификатора типа 4, которые связаны с несколькими урнами исопоставляя урны, например:

result
id | url
---+-----
2  | url3
2  | url4
4  | url1
4  | url6

я уже пробовал что-то вроде этого:

SELECT id,url 
  FROM ids 
  NATURAL JOIN urns 
  NATURAL JOIN urn_urls 
  NATURAL JOIN urls 
  WHERE type=4 
  HAVING count( #column# )>1;

с #column# одним из (id, lid, url), но возвращается только в строке;когда я добавил оператор GROUP BY, я получил больше, но не подходящих результатов для

SELECT id,url 
  FROM ids 
  NATURAL JOIN urns 
  NATURAL JOIN urn_urls
  NATURAL JOIN urls 
  WHERE type=4 
  GROUP BY #group# 
  HAVING count( #column# )>1;

для различных комбинаций #group# / #column# из (id, lid, url).

Итак, помощь приветствуется.

1 Ответ

0 голосов
/ 22 марта 2012

Как насчет -

SELECT id, GROUP_CONCAT(urls.url SEPARATOR ' ')
FROM ids 
NATURAL JOIN urns 
NATURAL JOIN urn_urls
NATURAL JOIN urls 
WHERE type=4 
GROUP BY ids.id 
HAVING COUNT(DISTINCT urls.url)>1;
...