SQLITE-在同一查询中使用子查询的结果

时间:2019-01-10 07:59:27

标签: sqlite eloquent

我想知道是否(如果可以)如何满足以下条件:

让我们说我有两个表:

表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

在此先感谢您的提示/帮助。

安德烈亚斯

2 个答案:

答案 0 :(得分:1)

您需要从tableatableb进行两次联接,然后再次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;

结果:-

enter image description here

第二个

enter image description here