选择满足where子句的行和共享公共键的行

问题描述 投票:0回答:1

我想选择满足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

mysql sql
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');
© www.soinside.com 2019 - 2024. All rights reserved.