仅当两个查询都返回结果时才联合返回结果

时间:2020-10-06 15:03:10

标签: sql

(select `pk_irfa` 
   from `incident_reports_form_answers`  
  where inc_question_id  = 338 
    AND  answer_text in ("N/A", "Graeme Clark")) 
union 
(select `pk_irfa` 
   from `incident_reports_form_answers`
  where inc_question_id  = 339
    AND  answer_text in ("Manager", "Pass"))

我希望查询查询以这样的方式工作:如果其中一个查询返回null联合,则不应返回任何记录。例如,如果question_id 338返回null,则整个查询必须返回空数据。有什么建议吗?

3 个答案:

答案 0 :(得分:0)

我认为您不需要select pk_irfa from incident_reports_form_answers where (inc_question_id = 338 AND answer_text in ('N/A', 'Graeme Clark'))) or (inc_question_id = 339 AND answer_text in ('Manager', 'Pass'))

pk_irfa

然后,如果您同时需要select pk_irfa from incident_reports_form_answers where (inc_question_id = 338 AND answer_text in ('N/A', 'Graeme Clark'))) or (inc_question_id = 339 AND answer_text in ('Manager', 'Pass')) group by pk_irfa having count(distinct inc_question_id) = 2; ,请使用聚合:

[2020-10-06T14:49:07.485Z] Requirements

[2020-10-06T14:49:07.485Z]     ext_TPC/11.8.128@prod/master from 'conan-extTPC' - Downloaded

[2020-10-06T14:49:07.485Z]     ext_cli_plugins/11.800.30@prod/master from 'conan-CliPlugins' - Downloaded

[2020-10-06T14:49:07.485Z]     ext_dotnet_plugins/11.800.44@prod/master from 'conan-DotNetPlugins' - Downloaded

[2020-10-06T14:49:07.485Z] Packages

[2020-10-06T14:49:07.485Z]     ext_TPC/11.8.128@prod/master:63da998e3642b50bee33f4449826b2d623661505 - Missing

[2020-10-06T14:49:07.485Z]     ext_cli_plugins/11.800.30@prod/master:63da998e3642b50bee33f4449826b2d623661505 - Download

[2020-10-06T14:49:07.485Z]     ext_dotnet_plugins/11.800.44@prod/master:63da998e3642b50bee33f4449826b2d623661505 - Download

[2020-10-06T14:49:07.485Z] 

[2020-10-06T14:49:07.485Z] Installing (downloading, building) binaries...

[2020-10-06T14:49:07.485Z] 

[2020-10-06T14:49:07.485Z] ERROR: Missing binary: ext_TPC/11.8.128@prod/master:63da998e3642b50bee33f4449826b2d623661505

[2020-10-06T14:49:07.485Z] ext_TPC/11.8.128@prod/master: WARN: Can't find a 'ext_TPC/11.8.128@prod/master' package for the specified settings, options and dependencies:

[2020-10-06T14:49:07.485Z] - Settings: arch=x86_64, build_type=Release, compiler=Visual Studio, compiler.runtime=MD, compiler.version=14, os=Windows

[2020-10-06T14:49:07.485Z] - Options: 

[2020-10-06T14:49:07.485Z] - Dependencies: 

[2020-10-06T14:49:07.485Z] - Requirements: 

[2020-10-06T14:49:07.485Z] - Package ID: 63da998e3642b50bee33f4449826b2d623661505

[2020-10-06T14:49:07.485Z] 

[2020-10-06T14:49:07.485Z] ERROR: Missing prebuilt package for 'ext_TPC/11.8.128@prod/master'

[2020-10-06T14:49:07.485Z] Try to build it from sources with "--build ext_TPC"

[2020-10-06T14:49:07.485Z] Or read "http://docs.conan.io/en/latest/faq/troubleshooting.html#error-missing-prebuilt-package"

[2020-10-06T14:49:07.485Z] 

script returned exit code 1

答案 1 :(得分:0)

您可以在某些CTE的帮助下进行处理:

WITH cte1 AS (
    SELECT pk_irfa
    FROM incident_reports_form_answers
    WHERE inc_question_id = 338 AND answer_text IN ('N/A', 'Graeme Clark')
),
cte2 AS (
    SELECT pk_irfa
    FROM incident_reports_form_answers
    WHERE inc_question_id = 339 AND answer_text IN ('Manager', 'Pass')
)

SELECT pk_irfa FROM cte1 WHERE (SELECT COUNT(*) FROM cte2 > 0)
UNION ALL
SELECT pk_irfa FROM cte2 WHERE (SELECT COUNT(*) FROM cte1 > 0);

请注意,只有在a)其CTE具有结果集, b)联合的另一半也具有结果集的情况下,联合的每一半才返回结果。

戈登提供了一种无需使用联合即可表达逻辑的方法,但以上内容与您所使用的原始逻辑非常接近。

答案 2 :(得分:0)

with x as (
  select a1.pk_irfa irfa1, a2.pk_irfa irfa2
  from 
    incident_reports_form_answers a1 
    inner join incident_reports_form_answers a2
    on
      a1.inc_question_id = 338 AND a1.answer_text in ('N/A', 'Graeme Clark') and
      a2.inc_question_id = 339 AND a2.answer_text in ('Manager', 'Pass')
)
select irfa1 as pk_irfa from x
union all
select irfa2 from x

如果连接失败,将不会有行。。我唯一的问题是您的条件是否在所有情况下都唯一地标识了一行,或者您是否会在某个时候遭受笛卡尔爆炸