我试图选择具体的条件,但似乎无法得到我想要的东西。我有以下表格:
人
person_id | first_name | last_name | prim_parent_id | sec_parent_id
服务
service_id | person_id | start_time | end_time | service_type_id
Service_Types
type_id | description
Service_User
service_id | start_time | end_Time | user_id
目标是让所有满足以下任何条件的person_id
:
Last Name Like 'Mar%'
Service Type Like 'Fusions%'
Service Type Like 'New%' And User_Id = 'Bob' And Start_Time On Or After 2009-01-01
以下是迄今为止的陈述:
SELECT DISTINCT person_id
FROM person P, service S, service_types ST, service_user SU
WHERE P.person_id = S.person_id
AND S.service_id = SU.service_id
AND ST.type_id = S.service_type_id
AND ((P.last_name LIKE 'Mar%'
OR ST.description LIKE 'Fusions%')
OR (ST.description LIKE 'New%'
AND SU.user_id = 'Bob'
AND start_time >= '2009-01-01'))
在上述语句有效的情况下,我还需要与上述结果中的prim_parent_id
和sec_parent_id
匹配的行。
答案 0 :(得分:0)
不清楚这里有什么问题。您是否正在尝试撤回更多行(即姓氏不以火星开头,但他们的父母会这样做的人)或撤回更多列(对于给定的结果集,显示父母双方的名字)。
如果是前者,只需使用3个单独查询的UNION。
如果是后者,请按如下方式使用JOIN:
SELECT DISTINCT
P.person_id,
prim_parent_id,
sec_parent_id
FROM
person P,
person parent1,
person parent2,
...etc...
WHERE
P.person_id = S.person_id and
P.prim_parent_id = parent1.person_id and
P.sec_parent_id = parent2.person_id and
...etc...