获取列,4个表

时间:2018-05-16 15:03:35

标签: sql postgresql

我遇到了以下SQL分配的一些问题。我要检索在包含单词'xyz'的部分中注册的任何成员的ID,名字和姓氏。

到目前为止,我已经完成了以下工作:

SELECT m.id, p.firstname, p.lastname FROM member m
INNER JOIN person p ON m.id = p.id
WHERE m.id IN (SELECT id FROM membersection);

我如何从这里前进?我不知道如何从membersection表中检索sectionid,然后使用该ID从section id中获取节名称,以便我可以检查节名是否包含前面提到的单词。

构件:

ID member_number REGISTRATION_DATE

membersection:

MEMBERID sectionid

ID 名字 名字

部分:

ID 名称

3 个答案:

答案 0 :(得分:2)

继续加入。最后使用LIKE检查section.name是否包含'xyz'

SELECT m.id,
       p.firstname,
       p.lastname
       FROM member m
            INNER JOIN person p
                       ON p.id = m.id
            INNER JOIN membersection ms
                       ON ms.memberid = m.id
            INNER JOIN section s
                       ON s.id = ms.sectionid
       WHERE s.name LIKE '%xyz%';

答案 1 :(得分:2)

关于数据结构的问题,您的问题存在一些含糊之处;什么是主键和外键?

但是,做一些假设,你几乎就在那里,你可以将多个连接语句链接在一起:

select
  m.id,
  p.firstname,
  p.lastname
from
  member m
  inner join person p on
    m.id = p.id
  inner join membersection ms on
    m.id = ms.memberid
  inner join section s on
    ms.sectionid = s.id
where
  s.name like '%xyz%'

答案 2 :(得分:1)

你的数据关系发生了什么并不是很明显,但这可能是你想要采取的基本路线(LEFT JOIN,因为我不知道这种关系):

SELECT m.id, p.firstname, p.lastname, ms.sectionid
FROM member m
INNER JOIN person p ON m.id = p.id 
LEFT JOIN section s ON m.id = s.id
LEFT JOIN membersection ms ON m.id = ms.memberid
WHERE s.name = 'xyz'