У меня есть две таблицы; Пакеты и пользователи:
CREATE TABLE packages
(id int, package_number varchar(20));
CREATE TABLE users
(id_package int, user_name varchar(20),
user_org varchar(20));
INSERT into packages
(`id`, `package_number`)
VALUES
('1', 'PACKAGE-0001'),
('2','PACKAGE-0002');
INSERT INTO users
(`id_package`, `user_name`, `user_org`)
VALUES
('1', 'John', 'ABC Pty Ltd'),
('1', 'Rebecca', 'Northshore Pty Ltd'),
('1', 'Grace', 'Northshore Pty Ltd'),
('1', 'James', 'Bank Pty Ltd'),
('2', 'Jonas', 'Northshore Pty Ltd'),
('2', 'Smith', 'Refi Pty Ltd');
Я ВЛЕВО СОЕДИНЯЮ обе таблицы на основе идентификатора из пакетов и использую предложение WHERE для фильтрации "номера пакета" (который является varchar).
Я также комбинирую с предложением AND, чтобы выбрать, в какую организацию оно было отправлено, но в то же время я хочу, чтобы он возвращал ВСЕ организации, в которые он был.
Мой код :
SELECT
packages.*,
GROUP_CONCAT(DISTINCT (TRIM(users.user_org))
SEPARATOR ',') AS recipients
FROM
packages
LEFT JOIN
users ON packages.id = users.id_package
WHERE
packages.package_number = 'PACKAGE-0001' AND user_org IN ("Northshore Pty Ltd")
вывод:
id package_number recipients
1 PACKAGE-0001 Northshore Pty Ltd
ожидается:
id package_number recipients
1 PACKAGE-0001 ABC Pty Ltd,Northshore Pty Ltd,Bank Pty Ltd
Я создал скрипку здесь: http://sqlfiddle.com/#! 9 / b58a1e / 4