如果一个选择结果不为空,则执行附加选择

时间:2019-10-11 14:58:03

标签: sql subquery notnull

我对表g中的结果感兴趣,该表g与表sl共享一个关键字sample_name。在这个问题中,表格是
s-样本,
p-项目,
l-分析和
g,分析g,
全部在架构a中。
为了优化,我只想在确认l.analysis_gNOT NULL之后查找表g。

给出:我开始使用的唯一信息是项目名称。项目表p通过示例表s与其他表链接。 s链接到每个表。表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'))
;

2 个答案:

答案 0 :(得分:0)

那么也许在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

答案 1 :(得分:0)

再次:请举一个例子!如果我们不得不猜测,我们无能为力,但我会尝试一下...

如果l.analysis_g包含表g中的ID,那么您可以使用:

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

我删除了您的WHERE子句,因为您没有提供足够的信息来允许任何人帮助对其进行优化(如果需要)。