2016-05-31 24 views
0

行想使SQL查询女巫加入超过2个SQL表没有忽视whitch具有空值加入超过2个SQL表没有忽视whitch具有空colomn

行,这是我的查询

SELECT d.id, d.nbPieces, o.title, o.latitude, o.longitude, p.link, v.nom 
FROM operation o LEFT OUTER JOIN 
    disponible d 
    ON d.numOperation = o.id LEFT OUTER JOIN 
    photooperation p 
    ON o.id = p.numoperation , city v 
WHERE d.nbPieces = 1 
      AND (d.surfaceMin>=8 AND d.surfaceMax<=300) 
      AND (d.prixMin>=140000 AND d.prixMax<=3500000) 
      AND v.id = o.numCity 

链接列可以为空值索姆行

结果应该是这样的:

id nbPieces title latitude longitude link  nom 

1  5   title1 -9.3564565 33.654864 photo1.jpg newYork 
2  5   title2 -3.3564565 45.6584566 NULL  Tokio 
3  5   title3 -2.3564565 13.6548786 NULL  Frence 

thankyou

+0

使用'LEFT JOIN'或'右JOIN'。但是你已经在使用它了。那么问题是什么呢? – Justinas

+0

在我的查询中有些东西是不正确的,它给了我一些没有链接值的行,但他们拥有它(在光照操作表中有一个外键引用操作表 – mark283

回答

0

简单的规则:从不FROM子句中使用逗号。 总是使用明确的JOIN语法。

然后,你只需要在所有WHERE条件,但第一个表移动到ON条款:

SELECT d.id, d.nbPieces, o.title, o.latitude, o.longitude, p.link, v.nom 
FROM operation o LEFT OUTER JOIN 
    disponible d 
    ON d.numOperation = o.id AND 
     (d.surfaceMin >= 8 AND d.surfaceMax <= 300) AND 
     (d.prixMin >= 140000 AND d.prixMax <= 3500000) AND 
     d.nbPieces = 1 LEFT OUTER JOIN 
    photooperation p 
    ON o.id = p.numoperation LEFT OUTER JOIN 
    city v 
    ON v.id = o.numCity; 
+0

你放置条件的区别是什么?在'WHERE'或'ON'部分? – Justinas

+0

此查询返回id为null的某些行,但我的表中没有空id,它也应该给出其中link为null的行 – mark283

+0

id nbPieces标题纬度经度链接nom NULL NULL title1 -9.3564565 33.654864 photo1.jpg newYork NULL NULL title2 -3.3564565 45.6584566 NULL Tokio 3 5 title3 -2.3564565 13.6548786 NULL Frence – mark283