Это поддельные имена таблиц, но в моей реальной проблеме представьте бизнес-правило, в котором говорится, что каждый родитель имеет 1 или 2 детей. Эти дети имеют число 0 или 1. у двух детей одного и того же родителя не может быть одинакового числа.MySQL: объедините 2 строки из другой таблицы в одну строку результата
Я хочу получить доступ к полям в строках children
, но хочу, чтобы значения были помещены в поле с префиксом числа. Пример:
parenttochildrenassoc:
+-------------+-------------+
| parent | child |
+-------------+-------------+
| 1 | 1 |
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
+-------------+-------------+
детей:
+-------------+-------------+------------+
| child | number | name |
+-------------+-------------+------------+
| 1 | 0 | Chuck |
| 2 | 1 | Sally |
| 3 | 0 | Carly |
| 4 | 1 | Billy |
+-------------+-------------+------------+
желаемого результата:
+-------------+-------------+------------+
| parent | child0 | child1 |
+-------------+-------------+------------+
| 1 | Chuck | Sally |
| 2 | Carly | NULL |
| 3 | NULL | Billy |
+-------------+-------------+------------+
Ближайший я мог бы получить ниже:
SELECT A.parent, C0.name as child0, C1.name as child1
FROM parenttochildassoc A
LEFT JOIN children C0 ON C0.child = A.child AND C0.number = 0
LEFT JOIN children C1 ON C1.child = A.child AND C1.number = 1
, которая производит это:
+-------------+-------------+------------+
| parent | child0 | child1 |
+-------------+-------------+------------+
| 1 | Chuck | NULL |
| 1 | NULL | Sally |
| 2 | Carly | NULL |
| 3 | NULL | Billy |
+-------------+-------------+------------+
Как я могу придавить это? Он кажется очень похожим на «поворот», описанный в этом answer (один из предложенных ответов идентичен моей попытке), но тот факт, что parenttochildrenassoc
много-много, кажется, нарушает его.
Есть ли максимальное количество детей в родителей? – shmosel
1 или 2 детей – thedarklord47