Я намагаюся досягти чогось подібного.
id tag name
1 foo name
1 bar name
2 foo name
2 foss name
Я намагався це зробити.
select id, group_concat(distinct tag) as tag, group_concat(distinct name) as name
where tag = "foo" or tag = "bar" group by id;
до якого я дістаюсь,
id tag name
1 foo, bar name
2 foo, foss name
Але те, що я хочу, є лише в тому випадку, якщо тег "foo" і "bar" для одного і того ж ідентифікатора, а потім друк, який повинен дати такий вихід.
id tag name
1 foo, bar name
Я зробив це, як це буде працювати в мовах програмування, таких як JAVA або C ++, використовуючи AND. Це призводить до нуля ..
select id, group_concat(distinct tag) as tag, group_concat(distinct name) as name
where (tag = "foo" and tag = "bar") group by id;
Відповіді:
1 для відповіді № 1Я думаю, ви хочете group by
і a having
:
select id, group_concat(distinct tag) as tag,
group_concat(distinct name) as name
from t
where tag in ("foo", "bar")
group by id
having count(distinct tag) = 2;
Як замітка. Будь-яка мова програмування, з якою я знайомий, повертається неправдивою tag = "foo" and tag = "bar"
, тому що тег може мати одне або інше значення, але не те і інше.