Я хочу выбрать строки, которые удовлетворяют моему предложению where и строкам, которые имеют общее поле. В этом примере я хочу получить обе дочерние строки, но всегда получаю первый дочерний элемент, присоединенный ко второй, а не одну строку для каждого дочернего элемента, содержащего только эти дочерние данные.
CREATE TABLE parent (
id int primary key,
name varchar(10) not null
);
CREATE TABLE child (
id int primary key,
name varchar(10) not null,
parent_id int not null,
foreign key (parent_id) references parent(id)
);
INSERT INTO parent (id, name) VALUES (1, 'mom');
INSERT INTO child (id, name, parent_id) VALUES (1, 'hal', 1), (2, 'boe', 1);
SELECT * FROM child c1 JOIN child c2 ON c1.parent_id = c2.parent_id WHERE c1.name = 'hal'
Дает мне результаты
id name parent_id id name parent_id
1 hal 1 1 hal 1
1 hal 1 2 boe 1
Когда я действительно хочу
id name parent_id
1 hal 1
2 boe 1
Это возвращает всех 'hal'
братьев", а также возвращает 'hal'
SELECT *
FROM child c1
WHERE c1.parent_id = (SELECT c2.parent_id
FROM child c2
WHERE c2.name = 'hal');