附加 select 如果一个 select 结果不为空
Additional select if one select result is not null
我对在 table g 中找到的结果感兴趣,它与 tables s
和 l
共享一个密钥 sample_name。在这个问题中 table 是
s
- 样本,
p
- 项目,
l
- 分析,
g
,分析g,
全部在架构 a
内。
为了优化,我只想在确认 l.analysis_g
是 NOT 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
子句,因为你没有提供足够的信息来让任何人帮助优化它(如果需要)。
我对在 table g 中找到的结果感兴趣,它与 tables s
和 l
共享一个密钥 sample_name。在这个问题中 table 是
s
- 样本,
p
- 项目,
l
- 分析,
g
,分析g,
全部在架构 a
内。
为了优化,我只想在确认 l.analysis_g
是 NOT NULL
.
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
子句,因为你没有提供足够的信息来让任何人帮助优化它(如果需要)。