繁体   English   中英

如何联接来自多个SQL查询的结果

[英]How to join results from multiple sql queries

我希望显示在SELECT中定义的必需列,一旦执行了一个条件并打印了该条件的结果,我希望从SELECT的新指定列中显示另一个where子句,依此类推,首先,我需要为了解决这两个查询,该计划是与大约10个查询器混合使用。 感谢Ps的问题之一,所有结果都显示在i_di1.naziv列中

SELECT bolnickiracun.id,
         bolnickiracun.id_dijagnoza1, i_di1.naziv naziv_dijagnoza1
FROM     bolnickiracun
LEFT JOIN i_dijagnoze_marko i_di1 ON bolnickiracun.id_dijagnoza1=i_di1.id
WHERE  bolnickiracun.id_dijagnoza1!="" and i_di1.naziv is null
UNION ALL
SELECT bolnickiracun.id,
         bolnickiracun.id_dijagnoza2, i_di2.naziv naziv_dijagnoza2
FROM     bolnickiracun
LEFT JOIN i_dijagnoze_marko i_di2 ON bolnickiracun.id_dijagnoza2=i_di2.id
WHERE  bolnickiracun.id_dijagnoza2!="" and i_di2.naziv is null

我希望结果看起来像这样:

id id_dijagnoza1   naziv_dijagnoza1   id_dijagnoza2   naziv_dijagnoza2
1     some data         null             
2     some data         null
3                                        some data         null
4                                        some data         null

关键是要找到naziv_dijagnoza1或naziv_dijagnoza2,其中null为空,即外键显示不存在主键,或者有人导入了不作为主键存在的不良外键。

这个3个SELECT的示例(第三个示例是根据可以看到的模式通过推导预测的)应该有助于理解您需要对10个SELECT的整个查询执行的操作。 您需要填写与NULL SELECT子句后,每列你在每一个dont'need的SELECT

SELECT bolnickiracun.id, bolnickiracun.id_dijagnoza1, i_di1.naziv naziv_dijagnoza1, NULL, NULL, NULL, NULL -- and so on
FROM     bolnickiracun
LEFT JOIN i_dijagnoze_marko i_di1 ON bolnickiracun.id_dijagnoza1=i_di1.id
WHERE  bolnickiracun.id_dijagnoza1!="" and i_di1.naziv is null

UNION ALL

SELECT bolnickiracun.id, NULL, NULL, bolnickiracun.id_dijagnoza2, i_di2.naziv naziv_dijagnoza2, NULL, NULL -- and so on
FROM     bolnickiracun
LEFT JOIN i_dijagnoze_marko i_di2 ON bolnickiracun.id_dijagnoza2=i_di2.id
WHERE  bolnickiracun.id_dijagnoza2!="" and i_di2.naziv is null

UNION ALL

SELECT bolnickiracun.id, NULL, NULL, NULL, NULL, bolnickiracun.id_dijagnoza3, i_di3.naziv naziv_dijagnoza3 -- and so on
FROM     bolnickiracun
LEFT JOIN i_dijagnoze_marko i_di3 ON bolnickiracun.id_dijagnoza3=i_di3.id
WHERE  bolnickiracun.id_dijagnoza3!="" and i_di3.naziv is null

每个SELECT的列数应该相同,并且正如您所看到的,对于3 SELECT来说,它是7列(每个表连接2个x 3 SELECT s + 1个ID为ID的第一列)。 对于10个SELECT ,每个SELECT子句中将有21列(id为1列,在每个表中为2列,其余部分由NULL填充)。 这不是很好的解决方案,但可能仅具有这样的数据库结构。

因此,对于10 SELECT ,第一个和最后一个应该看起来像这样:

    SELECT bolnickiracun.id, bolnickiracun.id_dijagnoza1, i_di1.naziv naziv_dijagnoza1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
FROM     bolnickiracun
LEFT JOIN i_dijagnoze_marko i_di1 ON bolnickiracun.id_dijagnoza1=i_di1.id
WHERE  bolnickiracun.id_dijagnoza1!="" and i_di1.naziv is null

UNION ALL
...
UNION ALL

SELECT bolnickiracun.id, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, bolnickiracun.id_dijagnoza10, i_di10.naziv naziv_dijagnoza10
FROM     bolnickiracun
LEFT JOIN i_dijagnoze_marko i_di10 ON bolnickiracun.id_dijagnoza10=i_di10.id
WHERE  bolnickiracun.id_dijagnoza10!="" and i_di10.naziv is null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM