我有两个表,一个主表和一个子表,并且都包含一个唯一的列字段。如果子表在唯一列字段中包含一个不同于主表值的值,我需要返回false。
案例:1
它包含3行
PLID
====
10
20
30
然后它包含主表PLID以外的唯一字段值,因此我需要返回False
案例:2
它包含3行
PLID
====
10
10
10
案例2包含与主表相同的值,因此需要返回True
为此需要SQL中的函数。
答案 0 :(得分:0)
修改
原始问题用sql
标记(指ANSI SQL),并且此答案使用标准的ANSI SQL。
但是事实证明,正在使用的DBMS是SQL Server,并且不支持类似的boolean
表达式。此答案不适用于Microsoft SQL Server 。
但是,我仍然将答案留给参考。
您可以使用具有NOT EXISTS条件的关联查询:
select plid, not exists (select *
from child_table ct
where ct.plid <> mt.plid) as has_no_other_values
from master_table mt;
答案 1 :(得分:0)
首先,您可以使用LEFT JOIN
查找一个表中存在的任何行,而不是另一个表中的行。
然后可以使用EXISTS
子句检查该查询是否返回任何行。
尽管许多SQL方言没有布尔类型,在这种情况下,您可以将它们全部包装在CASE
表达式中。
SELECT
CASE WHEN
EXISTS (
SELECT *
FROM table_child c
LEFT JOIN table_parent p
ON p.PLID = c.PLID
WHERE p.PLID IS NULL
)
THEN
0
ELSE
1
END
答案 2 :(得分:0)
select case
when
(select Count(select 1 from childTable as c where c.PLID = (select PLID from masterTable) )) = (select Count(*) from childTable)
then 'True'
else 'False'
end
答案 3 :(得分:0)
select c.plid, case when p.plid is null then 0 else 1 end as match
from child c
left outer join parent p in p.plid = c.plid
从子项中选择一个并将其加入父项,使父项与具有相同plid的子项匹配。但是,“左外部联接”将返回未找到匹配父项的子行。从该批次中,父级plid为空-也就是说,找不到匹配的父级行-显示0,否则显示1。
答案 4 :(得分:0)
之前未提及的另一种选择是将LEFT JOIN
条件下的突击步枪与IF(ISNULL)
一起使用。
SELECT IF(ISNULL(child.PLID,1,0))
FROM table_parent parent
LEFT JOIN table_child child ON child.PLID != parent.PLID
LIMIT 1
答案 5 :(得分:0)
从中选择计数(*) (从MasterPKID = 800的Child中选择max(ChildPKID)作为ID 按PLID分组)