Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 连接打开时sql选择中的句柄null_Mysql_Select_Null - Fatal编程技术网

Mysql 连接打开时sql选择中的句柄null

Mysql 连接打开时sql选择中的句柄null,mysql,select,null,Mysql,Select,Null,让我们把这3张桌子放在一起: 主表: ID | OtherStuff1 | OtherStuff2 | IdProvince | IdTown -----+-------------+-------------+------------+-------- 1 | Stuff1 | Stuff2 | NULL | 1 -----+-------------+-------------+------------+-------- 2 |

让我们把这3张桌子放在一起:

主表:

  ID | OtherStuff1 | OtherStuff2 | IdProvince | IdTown 
-----+-------------+-------------+------------+--------
   1 |   Stuff1    |   Stuff2    |    NULL    |   1    
-----+-------------+-------------+------------+--------
   2 |   Stuff3    |   Stuff4    |      1     |  NULL    
省表:

ID | ProvinceName 
---+--------------
 1 |  ProvName1   
镇表:

ID |   TownName   
---+--------------
 1 |   TwName1  
然后我使用其中一个sql来打印信息,使其显示名称而不是Id号

SELECT a.Id, OtherStuff1, OtherStuff2, ProvinceName, TownName 
    FROM main AS a 
    LEFT JOIN (province AS b, town AS c) 
    ON (a.IdProvince = b.Id AND a.IdTown = c.Id) 
    WHERE a.IdProvince=1;

问题在于,当它打印结果时,结果如下:

  ID | OtherStuff1 | OtherStuff2 | ProvinceName | TownName 
-----+-------------+-------------+--------------+--------
   1 |   Stuff1    |   Stuff2    |    NULL      |  NULL    
  ID | OtherStuff1 | OtherStuff2 | ProvinceName | TownName 
-----+-------------+-------------+--------------+--------
   2 |   Stuff1    |   Stuff2    |  ProvName1   |  NULL    
如果一个id被置为NULL,那么即使有其他id的数字,它也会置为NULL。如何避免这种情况,而不只是删除空列的联接,如下所示:

SELECT a.Id, OtherStuff1, OtherStuff2, ProvinceName, IdTown 
    FROM main AS a 
    LEFT JOIN (province AS b) 
    ON (a.IdProvince = b.Id) 
    WHERE a.IdProvince=1;
如果IdTown为NULL,这会起作用,但我不想要这个解决方案,因为有很多行和很多其他列都有Id,不可能逐个检查哪个为NULL,哪个不是NULL

所以我想要一个这样的查询,但是当有一个null时,它不会弄乱另一个Id将它们全部放在null中

SELECT a.Id, OtherStuff1, OtherStuff2, ProvinceName, TownName 
    FROM main AS a 
    LEFT JOIN (province AS b, town AS c) 
    ON (a.IdProvince = b.Id AND a.IdTown = c.Id) 
    WHERE a.IdProvince=1;
很抱歉,此查询的预期结果如下:

  ID | OtherStuff1 | OtherStuff2 | ProvinceName | TownName 
-----+-------------+-------------+--------------+--------
   1 |   Stuff1    |   Stuff2    |    NULL      |  NULL    
  ID | OtherStuff1 | OtherStuff2 | ProvinceName | TownName 
-----+-------------+-------------+--------------+--------
   2 |   Stuff1    |   Stuff2    |  ProvName1   |  NULL    
有什么想法吗

提前感谢您的帮助

如果使用的是ANSI92标准,则from子句应避免使用的连接符号。如果使用ANSI 89标准,则不应使用左连接语法 我看没有理由不做两个左连接回到主表A一个是省一个是镇。。。


这是因为ON条款中的条件:

a.IdProvince = b.Id AND a.IdTown = c.Id
在这里,您要求仅当两个条件都满足时才左键联接两个表,而在您的情况下,这两个条件都不满足

我会尽量保持两个连接分开,如下所示:

SELECT a.Id, OtherStuff1, OtherStuff2, b.ProvinceName, c.TownName
FROM main AS a 
LEFT JOIN province AS b ON (a.IdProvince = b.Id)
LEFT JOIN town AS c ON (a.IdTown = c.Id) 
WHERE a.IdProvince = 1;

您希望最终结果集中有什么内容?您用MySQL和Microsoft SQL Server标记了这个问题。你用的是哪一个?请发布预期结果我放上建议的标签,但这是真的,我用的是MySQL如果你不知道答案,请更新投票,这样其他人会看到它,也许会帮助我!谢谢