我想知道是否(如果可以)如何满足以下条件:
让我们说我有两个表:
表A有两列:id,name
表B列:所有者,参数
现在,我试图在表A中查找所有具有特定名称(动物)的行,并使用其ID在表b中查找其参数值。这些参数值是表a中的不同ID。因此,我想得到两列。第一个具有我要查找的特定名称(动物)的商品的ID,第二列具有该商品的名称,该商品的ID是初始ID的参数。
表a(示例)
id || name
1 || animal
2 || animal
3 || animal
4 || animal
15 || cat
16 || dog
17 || horse
18 || bird
...
表b(示例)
owner || argument
1 || 15
2 || 16
3 || 17
4 || 18
...
结果(示例)
id || name
1 || cat
2 || dog
3 || horse
4 || bird
在此先感谢您的提示/帮助。
安德烈亚斯
答案 0 :(得分:1)
您需要从tablea
到tableb
进行两次联接,然后再次doublea
:
select
a.name ownwename,
t.name name
from tablea a
inner join tableb b
on b.owner = a.id
inner join tablea t
on t.id = b.argument
where a.name = 'animal'
请参见demo
答案 1 :(得分:0)
我相信以下内容可以满足您的需求
SELECT owner, name FROM tableb JOIN tablea ON argument = id;
但是,就像使用子查询一样,您可以使用:-
SELECT owner, (SELECT name FROM tablea WHERE argument = id) AS name FROM tableb;
DROP TABLE If EXISTS tablea;
CREATE TABLE IF NOT EXISTS tablea (id INTEGER PRIMARY KEY, name TEXT);
INSERT INTO tablea (name) VALUES ('animal'),('animal'),('animal'),('animal'),('cat'),('dog'),('horse'),('bird'),
('animal'),('cat'),('dog'),('horse'),('bird'),('animal'),
('cat'),('dog'),('horse'),('bird') -- id's 15-18 inclusive
;
DROP TABLE IF EXISTS tableb;
CREATE TABLE IF NOT EXISTS tableb (owner INTEGER PRIMARY KEY, argument INTEGER);
INSERT INTO tableb (argument) VALUES(15),(16),(17),(18);
SELECT owner, name FROM tableb JOIN tablea ON argument = id;
SELECT owner, (SELECT name FROM tablea WHERE argument = id) AS name FROM tableb;
第二个