我不知道';我不知道如何创建此sql查询

我不知道';我不知道如何创建此sql查询,sql,sqlite,Sql,Sqlite,我有3张这样的桌子: 现在,如何从tab1(蓝色)中获取ID、名称和文本,这取决于tab3(红色)中分配的内容——但仅当tab1.ID=1时,我在tab3中分配了2222和1111。像这样的 SELECT DISTINCT e.ID, e.NAME, e.TEXT FROM tab1 AS e JOIN tab3 AS c WHERE e.ID = c.tab1ID AND (c.tab2name = 1111 AND c.tab2nam

我有3张这样的桌子:

现在,如何从tab1(蓝色)中获取ID、名称和文本,这取决于tab3(红色)中分配的内容——但仅当tab1.ID=1时,我在tab3中分配了2222和1111。像这样的

SELECT DISTINCT 
    e.ID, e.NAME, e.TEXT 
FROM 
    tab1 AS e 
JOIN 
    tab3 AS c 
WHERE 
    e.ID = c.tab1ID 
    AND (c.tab2name = 1111 AND c.tab2name = 2222)

但是它不起作用,我不知道如何正确地编写它。

这个子句不可能满足:
(c.tab2name=1111和c.tab2name=2222)
。您基本上是在寻找一条具有两个值的记录。您需要查找的是是否存在两个单独的记录。试试这个:

SELECT DISTINCT 
    e.ID, e.NAME, e.TEXT 
FROM 
    tab1 AS e 
WHERE e.ID IN (
    SELECT tab1ID
    FROM tab3
    WHERE tab2name = 1111)
AND e.ID IN (
    SELECT tab1ID
    FROM tab3
    WHERE tab2name = 2222)
我想你想要:

SELECT e.ID, e.NAME, e.TEXT 
FROM tab1S e 
WHERE EXISTS (SELECT 1 FROM tab3 c WHERE e.ID = c.tab1ID AND c.tab2name = 1111) AND
      EXISTS (SELECT 1 FROM tab3 c WHERE e.ID = c.tab1ID AND c.tab2name = 2222);

您只从
e
中选择列,因此不需要在中加入
c
。我猜
select distinct
是多余的,因为
join
引入了重复项。

但是如果我只想要那些正好有这两个数字的?不是那些包含。那么怎么做呢?@PapaSmerf。如果我理解正确,您将添加另一个
不存在
条件。