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

时间:2017-12-19 19:12:47

标签: mysql sql

我想选择满足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 个答案:

答案 0 :(得分:2)

这将返回所有'hal'个兄弟姐妹,并返回'hal'

<强> SQL DEMO

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