附加 select 如果一个 select 结果不为空

Additional select if one select result is not null

我对在 table g 中找到的结果感兴趣,它与 tables sl 共享一个密钥 sample_name。在这个问题中 table 是
s - 样本,
p - 项目,
l - 分析,
g,分析g,
全部在架构 a 内。
为了优化,我只想在确认 l.analysis_gNOT NULL.

后寻找 table g

Given:我开始使用的唯一信息是项目名称。项目 table、p 通过示例 table s 与其他 table 链接。 s 链接到每个 table。 Table l 包含分析类型,每列是 NULL 或 1。

在下面的示例中,我正在尝试一个案例,但我意识到这可能是完全不正确的。

SELECT s.sample_name,
       s.project_name,
       g.*
FROM a.samples s
JOIN a.analyses l
ON s.sample_name = l.sample_name
JOIN a.analysis_g g
ON s.sample_name = g.sample_name
WHERE s.project_name IN (SELECT p.project_name
                     FROM a.projects p
                     WHERE p.project_name_other
                     IN ('PROJ_1',
                     'PROJ_2'))
;

那么也许在 where 子句中?仍然很难理解你想要什么。 . .

SELECT s.sample_name,
       s.project_name,
       g.*
FROM a.samples s
JOIN a.analyses l
ON s.sample_name = l.sample_name
JOIN a.analysis_g g
ON s.sample_name = g.sample_name
WHERE s.project_name IN (SELECT p.project_name
                     FROM a.projects p
                     WHERE p.project_name_other
                     IN ('PROJ_1',
                     'PROJ_2'))
   and l.analysis_g IS NOT NULL
;

附带说明一下,我认为您可以加入 p.project_name 并避免使用 where 子句。而且我认为您可能需要一些内部联接——但我不确定。

SELECT s.sample_name,
       s.project_name,
       g.*
FROM a.samples s
JOIN a.analyses l ON s.sample_name = l.sample_name
JOIN a.analysis_g g ON s.sample_name = g.sample_name
JOIN a.projects p ON s.project_name = p.project_name
WHERE p.project_name_other IN ('PROJ_1', 'PROJ_2')
   and l.analysis_g IS NOT NULL

再次:请举个例子!如果我们不得不猜测,我们帮不上忙,但我会试一试...

如果 l.analysis_g 包含来自 table g 的 ID,那么您可以只使用:

    SELECT * FROM g
    JOIN l on g.id = l.analysis_g
    WHERE blah, blah, blah...

我删除了你的 WHERE 子句,因为你没有提供足够的信息来让任何人帮助优化它(如果需要)。