【发布时间】:2015-05-15 18:31:58
【问题描述】:
我有如下所示的父/子表:
CREATE TABLE users(
id integer primary key AUTOINCREMENT,
pnum varchar(10),
dloc varchar(100),
cc varchar(10),
name varchar(255),
group active bit(1)
);
CREATE TABLE group_members(
id integer primary key AUTOINCREMENT,
group_id integer,
member_id integer,
FOREIGN KEY (group_id) REFERENCES users(id),
FOREIGN KEY (member_id) REFERENCES users(id)
);
用户数据如下:
ID PNUM DLOC CC NAME GRP
86|23101|dloc 89| | |0
87|23101|dloc 90| | |0
88|23102|dloc 91| | |0
590|12345|Group | |Test Group|1
591|90000|dloc 1 | | |0
group_members 数据如下:
ID GROUP_ID
1 |590 | 87
2 |590 | 88
基于 PNUM,我希望能够获取所有用户的 dloc 值,无论它是否是一个组。
例如,如果有人请求 pnum 23101,我想返回
- “dloc 89”和
- “dloc 90”
但如果他们要求 12345,我想回来
- “dloc 90”和
- “dloc 91”
到目前为止,我想出了这个查询:
SELECT users.dloc
FROM users
WHERE users.id IN
(SELECT group_members.member_id
FROM group_members
INNER JOIN users on users.id = group_members.group_id
WHERE users.pnum='12345');
这适用于组,但如果我使用 pnum 23101 运行相同的查询,它不会返回任何结果。
到目前为止我所做的尝试
我试着看看我是否可以像这样使用 OR:
SELECT users.dloc
FROM users
WHERE users.id in
(SELECT group_members.member_id
FROM group_members
INNER JOIN users on users.id = group_members.group_id
WHERE users.pnum='12345');
OR
(SELECT users.dloc
FROM users
WHERE pnum='12345')
任何建议将不胜感激。
【问题讨论】:
-
如果有人请求 pnum 23101,我想取回 "dloc 89" 和 "dloc 90" 但如果他们请求 12345,我想取回 "dloc 89", " dloc 90" 和 "dloc 99" 这是正确的,还是你把它颠倒过来了?该组 (12345) 只有 2 个成员,而
pnum=23101有 3 个匹配行。 -
@MichaelBerkowski 我已经更新了这个问题。对不起,我确实有一些错别字。希望现在更清楚了。