我对表g中的结果感兴趣,该表g与表s
和l
共享一个关键字sample_name。在这个问题中,表格是
s
-样本,
p
-项目,
l
-分析和
g
,分析g,
全部在架构a
中。
为了优化,我只想在确认l.analysis_g
为NOT 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'))
;
答案 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
子句,因为您没有提供足够的信息来允许任何人帮助对其进行优化(如果需要)。