【发布时间】:2020-08-14 20:48:26
【问题描述】:
我希望使用 where 子句中的现有数据获取查询结果。要查询的现有数据和表将名字和姓氏分成 2 个字段。我需要一种方法来传递数组和单个 where 条件中的两个字段。
例如,这是我需要查询的源数据的工作表:
Dob Last First SSN
6/6/2006 Notaperson Billy 999880006
1/1/2001 Testing Marco 999880001/217061866
2/2/2002 Case Delilah 999880002
3/3/2003 Testcase Julius 999880003
4/4/2004 Notreal Adrianna 999880004
5/5/2005 Fake Julianna 999880005
12/1/2017 Mars Danielle 999880005
Image of source data worksheet
我需要查询任何 Dob、任何 SSN 以及任何 MATCHING 名字和姓氏。 例如: 返回 Dob=6/6/2006 和 ssn=999880006 和 FIRST/LAST=Notaperson Billy 的所有行
以下是我写的内容,但它返回了 last=Notaperson 的任何行和/或 first=Billy 的任何行。
如何设置 where 子句以搜索名字和姓氏作为单个数据值?
'''
with subjects as (
Select
s.subject_key
, s.dob
, n.last
, n.first
, sa_cid.alias as cid
, sa_cid.facility_key as cid_facility_key
, sa_cid.primary_aliaås as cid_primary_alias
, sa_cid.subject_alias_type_key as cid_subject_alias_type_key
, sa.alias
, sa.facility_key
, sa.primary_alias
, sa.subject_alias_type_key
from subject s
inner join subject_alias sa_cid
on sa_cid.subject_key = s.subject_key
and sa_cid.subject_alias_type_key = 3
inner join subject_alias sa
on sa.subject_key = s.subject_key
and sa.subject_alias_type_key != 3
inner join name n
on n.name_key = s.current_name_key
WHERE 1 = 1
and dob = ANY(
'{6/6/2006, 1/1/2001, 2/2/2002, 3/3/2003, 4/4/2004, 5/5/2005, 12/1/2017}')
or (
n.last = ANY(
'{NOTAPERSON, TESTING, CASE, TESTCASE, NOTREAL, FAKE, MARS
}')
OR n.first = ANY(
'{BILLY, MARCO, DELILAH, JULIUS, ADRIANNA, JULIANNA, DANIELLE
}')
)
or sa.alias = any('{
999880006, 999880001/217061866, 999880002, 999880003, 999880004, 999880005, 999880005}')
)
select
subject_key
, dob
, last
, first
, cid
, array_agg(alias || ':' || facility_key || ':' || subject_alias_type_key) as other_alias
from subjects
group by subject_key, dob, last, first, cid
order by cid, dob, last, first
'''
【问题讨论】:
-
你最后说了。 . .要么 。 . .第一的。试试“和”?
-
如果您对搜索值进行硬编码,只需结合姓氏||' '||first_name in ('David Beckham') 并搜索。根据您的数据库,您需要选择连接方法。
-
谢谢大卫,你是对的......我有点马虎。 last 和 first 是准确的。
标签: sql where-clause