выберите строки, которые удовлетворяют где пункт И строки, которые имеют общий ключ

0

Я хочу выбрать строки, которые удовлетворяют моему предложению 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

http://sqlfiddle.com/#!9/95615a/6

Теги:

1 ответ

2

Это возвращает всех 'hal' братьев", а также возвращает 'hal'

SQL DEMO

SELECT *
FROM child c1
WHERE c1.parent_id = (SELECT c2.parent_id
                      FROM child c2
                      WHERE c2.name = 'hal');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню