我想选择满足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
答案 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');