Выберите проблему запроса, а не данные, как я хочу - PullRequest
1 голос
/ 13 марта 2019

У меня есть две таблицы, father и grand_father

CREATE TABLE IF NOT EXISTS father (
    id INT AUTO_INCREMENT,
    father_name VARCHAR(255) NOT NULL,
    PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS grand_father (
    id INT AUTO_INCREMENT,
    father_id int(6) NOT NULL,
    grand_father_name VARCHAR(255) NOT NULL,
    PRIMARY KEY (id)
);
INSERT INTO father (id, father_name) VALUES
  ('1','Abid'),
  ('2','Hasan'),
  ('3','Jabed');
INSERT INTO grand_father (id, father_id,grand_father_name) VALUES
  ('1','1','Jon'),
  ('2','1','James'),
  ('3','2','Jakir'),
  ('4','2','Jamir'),
  ('5','3','Tom');

  select f.father_name,g.grand_father_name
from grand_father g
left join father f
on g.father_id = f.id;

+-------------+-------------------+
| father_name | grand_father_name |
+-------------+-------------------+
| Abid        | Jon               |
| Abid        | James             |
| Hasan       | Jakir             |
| Hasan       | Jamir             |
| Jabed       | Tom               |
+-------------+-------------------+

Кодовая ссылка: http://sqlfiddle.com/#!9/8be4c/3 Проблема запроса

Мне нужен такой результат:

+--------------+-------------------+
| father_name  | grand_father_name |
+--------------+-------------------+
|   Abid       | Jon               |
|              | James             |
+--------------+-------------------+
|   Abid       | Jon               |
|              | James             |
+--------------+-------------------+
|   Jabed      | Tom               |
+--------------+-------------------+

Это возможно или нет?
Как я могу получить такой результат.
Я пытаюсь:

select f.father_name, g.grand_father_name 
from grand_father g 
left join father f 
  on g.father_id = f.id

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Предположительно, у каждого есть дедушка. В каком случае:

select f.father_name,
       group_concat(g.grand_father_name) as grand_fathers
from father f join
     grand_father g
     on g.father_id = f.id
group by f.father_name;

Я предпочитаю отдельную запятую по умолчанию, но вы можете это изменить.

Если вы хотите, чтобы все отцы, даже те, у которых нет дедов, вместо этого используйте left join.

1 голос
/ 13 марта 2019

использование group_concat()

select f.father_name,group_concat(g.grand_father_name SEPARATOR '\r\n')
from grand_father g
left join father f
on g.father_id = f.id
group by f.father_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...