具有表约束的Sybase Select语句

时间:2014-01-15 01:23:15

标签: sql sybase

我试图选择具体的条件,但似乎无法得到我想要的东西。我有以下表格:

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_idsec_parent_id匹配的行。

1 个答案:

答案 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...