带有简单连接的SQL语句

时间:2015-02-12 20:56:10

标签: sql

我在执行SQL语句时遇到问题。我有以下示例表:

表1:

ID - | - Name
1; ABC
2; DEF
3; GHI

表2:

ID - | - Bool
1; true
1; false
2; true
3; false
3; false

我想加入表但只显示实体,表2中没有false。示例: 在一个实体中是否存在错误和真实,我不想在我的结果中拥有实体。在一个实体中是否真的如此,没关系。 我的问题是实体,表2中有真假...... 谢谢你的帮助!

4 个答案:

答案 0 :(得分:1)

由于您的ID在table2中有重复项,因此您必须进行一些清点/计数:

SELECT table1.ID, table1.Name,
    SUM(table2.Bool = false) as trues,
    SUM(table1.Bool = true) as falses
FROM table1
INNER JOIN table2 ON table1.ID = table2.ID
GROUP BY table1.ID
HAVING falses = 0

答案 1 :(得分:0)

这将为您提供表2中具有TRUE记录但没有FALSE记录的所有记录:

SELECT ID, Name
FROM Table1 t1
WHERE EXISTS
(
   SELECT NULL
   FROM Table2 t2
   WHERE t2.ID = t1.ID
   AND t2.Bool = 'true'
) 
AND NOT EXISTS
(
   SELECT NULL
   FROM Table2 t2
   WHERE t2.ID = t1.ID
   AND t2.Bool = 'false'
) 

答案 2 :(得分:0)

我没有方便的数据库,但我想知道这是否有效:

select t1.id, t1.name
from table1 t1
inner join table2 t2 on t1.id = t2.id
where t1.id not in (select id from table2 where Bool = 'false')

答案 3 :(得分:0)

如果表2中的'bool'列真的是boolean数据类型,如果为真则为1,如果为false则为0,则任何最小bool值不等于0的ID必须没有false值。

所以你可以跑:(见小提琴http://sqlfiddle.com/#!2/76639/1/0

select t1.id, t1.name
  from table_1 t1
  join (select id from table_2 group by id having min(bool) <> 0) v
    on t1.id = v.id