sql,则为hive-flag

6ss1mwsb  于 2021-06-24  发布在  Hive
关注(0)|答案(4)|浏览(290)

两个具有相同字段名的表>>学生表(a)中的student.id和记录表(b)中的student.id
如果student表中的student.id也在记录表中(join on a.student.id=b.student.id),则说“yes”,否则说“no”作为“match”

vltsax25

vltsax251#

如果没有副本,则可以使用 left join :

select s.*, (case when r.student_id is null then 'No' else 'Yes' end)
from students s left join
     records r
     on r.student_id = s.id;

如果可能存在重复项,则在加入之前移除重复项:

select s.*, (case when r.student_id is null then 'No' else 'Yes' end)
from students s left join
     (select distinct r.student_id
      from records r
     ) r
     on r.student_id = s.id;
sdnqo3pr

sdnqo3pr2#

考虑一个左连接,它将显示第一个表中的所有记录,以及第二个表中的所有匹配记录。您可以使用case语句来显示它们是否匹配。

SELECT
    A.StudentID,
    B.StudentID,
    CASE WHEN b.StudentID IS NOT NULL THEN 'Yes' ELSE 'NO' END As Match
FROM
    StudentA a
    LEFT JOIN StudentB b on a.StudentID = b.StudentID
wmomyfyw

wmomyfyw3#

以下是安全的重复和可能更快,如果有许多重复。

select *, 
case when exists (select null from other_students b 
                  where b.id = a.id) then 'Yes' else 'No' end student_match
from students a

请看这里的sql fiddle。

rggaifut

rggaifut4#

你可以使用一个左连接和一个case当

select  case when b.student_id is null then 'No' else 'Yes' END match
from  student a
left join  record  b on a.student_id = b.student_id

相关问题