我在执行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中有真假...... 谢谢你的帮助!
答案 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