Mysql 连接打开时sql选择中的句柄null
让我们把这3张桌子放在一起: 主表:Mysql 连接打开时sql选择中的句柄null,mysql,select,null,Mysql,Select,Null,让我们把这3张桌子放在一起: 主表: ID | OtherStuff1 | OtherStuff2 | IdProvince | IdTown -----+-------------+-------------+------------+-------- 1 | Stuff1 | Stuff2 | NULL | 1 -----+-------------+-------------+------------+-------- 2 |
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如果你不知道答案,请更新投票,这样其他人会看到它,也许会帮助我!谢谢