如何使用引用相同字段两次的表来编写SQL查询

时间:2017-03-01 19:52:57

标签: sql sqlite

我有以下sqlite架构:

cons

我的widget_grps中的数据如下所示:

symbol

在小部件中:

atom

因此,您可以看到group_id和member_id字段都指向窗口小部件表,但指向不同的值。我正在尝试编写一个返回如下数据的查询:

sqlite> .schema

CREATE TABLE widgets
(
     id integer primary key AUTOINCREMENT, 
     pnum varchar(10), 
     destvarchar(100), 
     class varchar(10), 
     name varchar(255), 
     grp integer
);

CREATE TABLE widget_grps
(
     id integer primary key AUTOINCREMENT, 
     group_id integer, 
     member_id integer, 

     FOREIGN KEY (group_id) REFERENCES widgets(id), 
     FOREIGN KEY (member_id) REFERENCES widgets(id)
);
你能指出我正确的方向吗?

编辑1

sqlite> select * from widget_grps limit 2;
35|2103|304
36|2103|305
sqlite>

编辑2

sqlite> select * from widgets where id=2103;
2103|90042|Group||Widget Group 1|1
sqlite> select * from widgets where id=304;
304|11681|dest1222|smfass|Johnn Doe|0
sqlite>

1 个答案:

答案 0 :(得分:2)

我认为以下查询应该产生所需的结果:

select wg.pnum as group_pnum, g.group_id, ww.pnum as widget_pnum, g.member_id
from widget_grps g
     left join widgets wg on g.group_id = wg.id
     left join widgets ww on g.member_id = ww.id

如果您只想选择group_idmember_idwidget_grps不同的项目,请添加以下条件:

where g.group_id <> g.member_id