[英]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.