我不知道如何创建这个SQL查询

时间:2018-08-16 17:58:57

标签: sql sqlite

我有3张这样的桌子:

enter image description here

现在如何根据tab3(红色)中分配的内容从tab1(蓝色)中获取ID,NAME和TEXT-但仅(如本例所示)何时给tab1.ID = 1我分配了2222和1111在tab3中。像这样

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)

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

2 个答案:

答案 0 :(得分:0)

此子句不可能满足:(c.tab2name = 1111 AND 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)

答案 1 :(得分:0)

我想你想要

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引入了重复。