2016-11-21 77 views
0

我想显示在SELECT中定义的所需列,一旦执行了一个条件并打印条件的结果,我想从SELECT中的新指定列中显示另一个条件条款等等,首先不知何故,我需要解决这两个查询,之后,该计划是混合约10个queires。感谢诗的是,i_di1.naziv如何加入来自多个SQL查询的结果

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哪里是空即,外键显示不存在主键,或者某人导入不存在作为主键的错误外键。

+0

SQL服务器IR MySQL的? – Jens

+0

@GordonLinoff sry,我的错误,是mysql – MPetrovic

+0

显示'bolnickiracun','i_dijagnoze_marko'表结构,几行数据和预期结果 –

回答

0

这个例子对于3 SELECT(第三个通过基于可以看到的模式的推论预测)应该有助于理解对于整个查询需要做什么10 SELECT's。您需要在每个SELECT之后的每个列中填写NULL的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表接合×3个SELECT S + 1与ID第一列)。对于每个SELECT条款中的每个012条中的21列(1代表id,2代表每个表中,其余的填充NULL s)。 不是漂亮的解决方案,但可能只有像这样的数据库结构。

所以对于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 
+0

谢谢你,这工作正常,是否有可能,在第一次选择,把所有名称,并与其他选择填充数据? – MPetrovic

+0

而不是。首先'SELECT'只加入'bolnickiracun'和'i_dijagnoze_marko'表,所以如果你尝试选择dijagnoza3 - 查询将失败。 我试着找到任何其他解决方案,例如somrthing与一个选择和许多联接,但我找不到任何 –

+0

我将解决与别名的列的名称,这将是一个“体力工作”,因为有很多手动调整,但没关系,因为我得到了我期望的结果。 – MPetrovic