Muszę uruchomić zapytanie takie jak:
SELECT p.id, p.name,
(SELECT name
FROM sites s
WHERE s.id = p.site_id) AS site_list
FROM publications p
Ale chciałbym, aby sub-select zwrócił listę oddzieloną przecinkami zamiast kolumny danych. Czy to w ogóle możliwe, a jeśli tak, to w jaki sposób?
sql
mysql
concatenation
Glen Solsberry
źródło
źródło
GROUP_CONCAT(CAST(s.name AS CHAR))
lub po prostu zwróci coś całkowicie bezużytecznego, jak[BLOB - 20 Bytes]
.Zamiast używać
group concat()
, możesz użyć justconcat()
edycja działa tylko w mySQL; Oracle concat akceptuje tylko dwa argumenty. W Oracle możesz użyć czegoś takiego jak select col1 || ',' || col2 || ',' || col3 jako foobar z tabeli1; na serwerze sql użyłbyś + zamiast potoków.
źródło
Dopiero teraz natknąłem się na tę sytuację i znalazłem kilka ciekawszych funkcji
GROUP_CONCAT
. Mam nadzieję, że te szczegóły sprawią, że poczujesz się interesująco.prosty GROUP_CONCAT
Wynik:
GROUP_CONCAT z DISTINCT
Wynik:
GROUP_CONCAT z DISTINCT i ORDER BY
Wynik:
GROUP_CONCAT z DISTINCT i SEPARATOR
Wynik:
GROUP_CONCAT i łączenie kolumn
Wynik:
GROUP_CONCAT i pogrupowane wyniki Załóżmy, że przed użyciem przedstawiono następujące wyniki
GROUP_CONCAT
Wynik:
źródło
W moim przypadku muszę połączyć cały numer konta osoby, której numer telefonu komórkowego jest unikalny. Więc użyłem następującego zapytania, aby to osiągnąć.
Wynik zapytania jest poniżej:
źródło